多线程中如何加标志位,来随时结束某一线程
具体怎样实现?我是菜鸟,希望大家尽量说的详细些。谢谢!

解决方案 »

  1.   

    呵呵,菜鸟还关心多线程啊。
    一般的办法是在线程类中提供一个方法,比如askQuit(),需要该线程结束是调用该方法即可。
    而该方法也很简单,设置一个成员变量的标志为即可。比如:mAskQuit=true。然后,在run()方法里应该适时检查该变量的值,当mAskQuit==true时自动退出。
    注意,在不严格的情况下,这里不需要同步处理。
    一个简单的例子:
    class ThreadA implements Thread{
    protected boolean mAskQuit=false;
    public void askQuit(){
      mAskQuit=true;
    }
    protected void run(){
      while(mAskQuit==false){
        //...
      }
    }
      

  2.   

    你举的例子,当run()里的语句可以主动执行完的情况下加入while(mAskQuit==false)确实管用,但我的情况是,run()里的语句不能主动执行完,因为里面含有接收udp数据报的语句,当对方不发数据过来时,程序一直停在那里等待接收,这时我如果要停止这个线程用你的方法改变标志位自然就不好使了,你说呢
      

  3.   

    一个原则:线程应该由自己结束自己。所以最好应该使用我说的方式。
    另外,我写的只是一个例子,具体写法可以不同。
    你说的这句话“程序一直停在那里等待接收”可能不严格。在等的时候,就应该同时检查mAskQuit的状态,而不是无限制傻等。