关于mina报 DEAD LOCK

333333333333r 2014-03-10 04:11:43



/**
* 初始化
*/
private void initialize() {
if (!isInitialized) {
addFliters(); // 添加默认拦截器
addListeners(); // 添加默认监听器
if (ioSession != null && ioSession.isConnected()) {
throw new IllegalStateException("连接已经建立,请首先断开现有连接再执行本操作。");
}
int processorCount = Runtime.getRuntime().availableProcessors();
ioConnector = new NioSocketConnector(processorCount + 1); // 连接CPU_CORE_AMOUNT+1的参数
ioConnector.setConnectTimeoutMillis(connectTimeout);
TextLineCodecFactory codecFactory = new TextLineCodecFactory(charset);
codecFactory.setEncoderMaxLineLength(1 * 1024 * 1024); // 最大解码
codecFactory.setDecoderMaxLineLength(1 * 1024 * 1024); // 最大编码
ioConnector.getFilterChain().addLast("codec", new ProtocolCodecFilter(codecFactory));
ioConnector.setHandler(new LongConnectorHandler(this));
isInitialized = true;
setStop(false);
}
}



/**
* 连接服务器
*/
public void connect() {
//MARK 连接服务器
close();
while(true) {
try {
if (OnlineControl.canConnect()) { // 连接控制,判断是否可以重连
log.debug("准备连接到 " + getConfiguration().getHost() + ":" + getConfiguration().getPort() + "...");
ConnectFuture connectFuture = getIoConnector().connect(new InetSocketAddress(getConfiguration().getHost(), getConfiguration().getPort()));
/**
* 下面这行代码会报图中的错误
*
* T_T
*
*/
connectFuture.awaitUninterruptibly(20000);// 连接超时
setIoSession(connectFuture.getSession());
if (isConnected()) { // 判断是否已经连接成功
break;
}
} else {
log.debug("链接控制服务程序不允许连接MsgSrv," + (getConfiguration().getReconnectGap()/1000) + "秒后重试...");
sleep(getConfiguration().getReconnectGap());
}
} catch (OnlineControlException e) {
log.error("", e);
log.debug((getConfiguration().getReconnectGap()/1000) + "秒后重试...");
sleep(getConfiguration().getReconnectGap());
} catch (Exception e) {
log.error("连接失败,可能是服务没有启动或者网络不通," + (getConfiguration().getReconnectGap()/1000) + "秒后重试...", e);
sleep(getConfiguration().getReconnectGap());
}
}
}



在标红的地方会报错,如果不用这个方法,采用connectFuture.awaitUninterruptibly(),有些时候它就会卡在那里,不动了。。。
求各位大神帮助T_T
...全文
69 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧