課程
/后端開發(fā)
/Java
/細(xì)說多線程之Thread VS Runnable
老師有沒有講解死鎖的教程啊,請(qǐng)教學(xué)
2015-08-22
源自:細(xì)說多線程之Thread VS Runnable 3-4
正在回答
? final NioSocketConnector connector = getConnector();
? ? ? ? connector.getFilterChain().addLast("transportCoder",
? ? ? ? ? ? ? ? new ProtocolCodecFilter(new CustomProtocolCodecFactory(Charset.forName("UTF-8"))));
? ? ? ? connector.getSessionConfig().setReceiveBufferSize(2048);//接收緩沖區(qū)1M
? ? ? ? connector.setConnectTimeoutMillis(ConfigBean.getHeartbeatTimeout()); // 設(shè)置連接超時(shí)
? ? ? ? connector.setHandler(new TcpClientHandler());// 設(shè)置消息處理器
? ? ? ? connector.getFilterChain().addLast("exceutor", new ExecutorFilter());
? ? ? ? //=============添加監(jiān)控,斷線重連============
? ? ? ? connector.setDefaultRemoteAddress(new InetSocketAddress(ConfigBean.getOpenRestyUrl(),ConfigBean.getOpenRestyPort()));
? ? ? ? connector.addListener(new IoListener(){
? ? ? ? ? ? @Override
? ? ? ? ? ? public void sessionDestroyed(IoSession arg)throws Exception{
? ? ? ? ? ? ? ? cfs=null;
? ? ? ? ? ? ? ? for (;;) {
? ? ? ? ? ? ? ? if (isHostConnectable(ConfigBean.getOpenRestyUrl(), ConfigBean.getOpenRestyPort())) {
? ? ? ? ? ? ? ? ? try {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Thread.sleep(5000);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?ConnectFuture future = connector.connect();
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?future.awaitUninterruptibly();// 等待連接創(chuàng)建完成 這里可能出現(xiàn)死鎖
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?session = future.getSession();
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?if (session.isConnected()) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?cfs=future;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?logger.info("斷線重連[" + connector.getDefaultRemoteAddress().getHostName() + ":" + connector.getDefaultRemoteAddress().getPort() + "]成功");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?break;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ? ? ? ? ?} catch (Exception e) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?cfs=null;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?logger.error("重連服務(wù)器登錄失敗,5秒再連接一次:" + e.getMessage());
? ? ? ? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? });
之前看書有講:1、盡量避免不必要的synchronized關(guān)鍵字。2、可以用其他方法替換synchronized關(guān)鍵字,比如標(biāo)志不可變量。3、保證synchronized代碼塊簡練。個(gè)人表述不太清楚,詳見《Java Network Programming》第四版Deadlock塊部分,謝謝。
舉報(bào)
認(rèn)識(shí)Thread和Runnable的區(qū)別,以及使用jstack生成線程快照
2 回答真的不用鎖???
3 回答實(shí)現(xiàn)Runaable出現(xiàn)了問題,代碼和視頻中的一樣
2 回答我怎么運(yùn)行會(huì)出現(xiàn)這樣的輸出啊
3 回答應(yīng)該加鎖,不然還是有可能會(huì)出錯(cuò),
1 回答賣票的問題
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號(hào)-11 京公網(wǎng)安備11010802030151號(hào)
購課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動(dòng)學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號(hào)
2020-01-16
? final NioSocketConnector connector = getConnector();
? ? ? ? connector.getFilterChain().addLast("transportCoder",
? ? ? ? ? ? ? ? new ProtocolCodecFilter(new CustomProtocolCodecFactory(Charset.forName("UTF-8"))));
? ? ? ? connector.getSessionConfig().setReceiveBufferSize(2048);//接收緩沖區(qū)1M
? ? ? ? connector.setConnectTimeoutMillis(ConfigBean.getHeartbeatTimeout()); // 設(shè)置連接超時(shí)
? ? ? ? connector.setHandler(new TcpClientHandler());// 設(shè)置消息處理器
? ? ? ? connector.getFilterChain().addLast("exceutor", new ExecutorFilter());
? ? ? ? //=============添加監(jiān)控,斷線重連============
? ? ? ? connector.setDefaultRemoteAddress(new InetSocketAddress(ConfigBean.getOpenRestyUrl(),ConfigBean.getOpenRestyPort()));
? ? ? ? connector.addListener(new IoListener(){
? ? ? ? ? ? @Override
? ? ? ? ? ? public void sessionDestroyed(IoSession arg)throws Exception{
? ? ? ? ? ? ? ? cfs=null;
? ? ? ? ? ? ? ? for (;;) {
? ? ? ? ? ? ? ? if (isHostConnectable(ConfigBean.getOpenRestyUrl(), ConfigBean.getOpenRestyPort())) {
? ? ? ? ? ? ? ? ? try {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Thread.sleep(5000);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?ConnectFuture future = connector.connect();
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?future.awaitUninterruptibly();// 等待連接創(chuàng)建完成 這里可能出現(xiàn)死鎖
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?session = future.getSession();
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?if (session.isConnected()) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?cfs=future;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?logger.info("斷線重連[" + connector.getDefaultRemoteAddress().getHostName() + ":" + connector.getDefaultRemoteAddress().getPort() + "]成功");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?break;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ? ? ? ? ?} catch (Exception e) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?cfs=null;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?logger.error("重連服務(wù)器登錄失敗,5秒再連接一次:" + e.getMessage());
? ? ? ? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? });
2015-12-24
之前看書有講:1、盡量避免不必要的synchronized關(guān)鍵字。2、可以用其他方法替換synchronized關(guān)鍵字,比如標(biāo)志不可變量。3、保證synchronized代碼塊簡練。個(gè)人表述不太清楚,詳見《Java Network Programming》第四版Deadlock塊部分,謝謝。