有一个线程,里面按顺序执行了好多个步骤,现在有一个flag,当flag=false的时候,线程就退出.
感觉下面的写法有点2,因为步骤很多,每个步骤都去检查一下flag的值,觉得很土.
有没有其他好的方法.当flag=false的时候,线程能够"知道"该退出了,然后安全退出.public class test {
public static void main(String[] args) {
myThread mt = new myThread();
mt.start(); //...
sleep(sometime);
mt.flag = false;
}
}class myThread extends Thread {
public boolean flag; @Override
public void run() {
while (flag) {
step1();
// if(!flag) break;
step2();
// if(!flag) break;
step3();
// if(!flag) break;
step4();
// if(!flag) break;
step5();
// if(!flag) break;
step6();
}
}
}

解决方案 »

  1.   

    如果你的逻辑是要求每个step前需要flag为true,且每个step都可能改变flag,那么这个判断不能少
      

  2.   

    就楼主的描述看,很有可能是一个变量被拿来做多个用途了。这是编程的大忌。一个变量值应该做一种用途,否则很难看懂。建议楼主将逻辑剥离开来,最后形成像竹节一样的形式:
    boolean canRun = check();
    if (!canRun) {
      return;
    }Object someResult = getSomeResult();
    if (someResult == null) {
      return;
    }...
      

  3.   

    可以再起一个监视线程,如果flag == false,就强行终止myThread,并且自己随后结束。
      

  4.   


    怎么样强行终止,好像线程不能乱停止吧.stop()是不被推荐的
      

  5.   


    确实每个步骤都要去看一下flag的值,这样后面的步骤就不用多余去走了,可以及时退出线程.但是如果有10个步骤,这个if要写10次,感觉很2.有没有其他写法
      

  6.   


    我的题意是在线程执行的某时刻,要把这个线程退了.比如执行到step3,那么step456就不用走了 浪费效率.
    有没有更好的写法