我写了一个线程
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的状态没有同步到线程里面,请问高手该如何处理啊?在线等!

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【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
      

  2.   

    我问你:你这里面提到的两个线程是属于同一个线程类吗?如果是的话,就把ss设成static
      

  3.   

    ss.close();方法,不会使ss对象的引用值是null.
    楼主的判断条件ss==null 可否改成ss.isClosed(),这样应该能够完成楼主所说的情况.注意,ss.acept();是一个阻塞方法,当没有客户端进行连接的时候,线程是阻塞状态的.
      

  4.   

    八楼的:这个我是知道的,我在关闭线程的方法中先将ss.close()了,然后将ss=null
      

  5.   

    把ss==null条件改成ss.isClosed()试一下,有可能会成功.ss.close()不会使ss的引用值变城null.还有,ss.accept()方法是阻塞方法.要注意.
      

  6.   

    关键是这个ss   你在那个方法里让ss为null  你确定你这个类里的ss会变成null吗?加static 试试
      

  7.   

    另一个线程设置ss为null但不一定是这个线程的ss哦
      

  8.   

    哦,那应该是程序还没有进入下一次循环.
    因为,我刚才说过了.ss.accept()是一个阻塞方法.没有客户端进行连接,他会把线程一直阻塞下去.
    这样,这个循环结构,就不能顺利进行下去.
    你可以在ss==null后面,用一个socket尝试连一下服务端(要把连接超时时间设置的小一点),促使服务端进入下一个循环,这样就OK了.我记得有个更好的方法来着,好像有个什么超时设定.不过现在想不起来了.