我写了一个线程
public void run()
{ while(status)
{
System.out.println("ss:" + ss); if(ss == null)
{
status = false;
break;
}
else
{
try
{
sk = ss.accept();
threadpool.getThread(new ClientThread(sk));
}
catch(IOException ex)
{
System.out.print("aaaa:" + ss);
ex.printStackTrace();
} }
}
}
我在另外一个线程里面调用了一个方法关闭了ss,使ss的状态为null,但是上面这个线程里面却跳过了这个判断
if(ss == null)
{
status = false;
break;
}
显然是ss的状态没有同步到线程里面,请问高手该如何处理啊?在线等!
public void run()
{ while(status)
{
System.out.println("ss:" + ss); if(ss == null)
{
status = false;
break;
}
else
{
try
{
sk = ss.accept();
threadpool.getThread(new ClientThread(sk));
}
catch(IOException ex)
{
System.out.print("aaaa:" + ss);
ex.printStackTrace();
} }
}
}
我在另外一个线程里面调用了一个方法关闭了ss,使ss的状态为null,但是上面这个线程里面却跳过了这个判断
if(ss == null)
{
status = false;
break;
}
显然是ss的状态没有同步到线程里面,请问高手该如何处理啊?在线等!
楼主【zjzhaobo】截止到2008-07-09 16:24:14的历史汇总数据(不包括此帖):
发帖的总数量:1 发帖的总分数:20 每贴平均分数:20
回帖的总数量:0 得分贴总数量:0 回帖的得分率:0%
结贴的总数量:0 结贴的总分数:0
无满意结贴数:0 无满意结贴分:0
未结的帖子数:1 未结的总分数:20
结贴的百分比:0.00 % 结分的百分比:0.00 %
无满意结贴率:---------------------无满意结分率:---------------------
如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html
楼主的判断条件ss==null 可否改成ss.isClosed(),这样应该能够完成楼主所说的情况.注意,ss.acept();是一个阻塞方法,当没有客户端进行连接的时候,线程是阻塞状态的.
因为,我刚才说过了.ss.accept()是一个阻塞方法.没有客户端进行连接,他会把线程一直阻塞下去.
这样,这个循环结构,就不能顺利进行下去.
你可以在ss==null后面,用一个socket尝试连一下服务端(要把连接超时时间设置的小一点),促使服务端进入下一个循环,这样就OK了.我记得有个更好的方法来着,好像有个什么超时设定.不过现在想不起来了.