问个java问题啊

「已注销」 2011-11-25 02:13:48
有一个线程,里面按顺序执行了好多个步骤,现在有一个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();
}
}
}
...全文
129 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2011-11-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 leehomwong 的回复:]

step的if判断完全可以不要~
[/Quote]

我的题意是在线程执行的某时刻,要把这个线程退了.比如执行到step3,那么step456就不用走了 浪费效率.
有没有更好的写法
「已注销」 2011-11-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ace62 的回复:]

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

确实每个步骤都要去看一下flag的值,这样后面的步骤就不用多余去走了,可以及时退出线程.但是如果有10个步骤,这个if要写10次,感觉很2.有没有其他写法
「已注销」 2011-11-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zyc13701469860 的回复:]

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

怎么样强行终止,好像线程不能乱停止吧.stop()是不被推荐的
Mourinho 2011-11-25
  • 打赏
  • 举报
回复
可以再起一个监视线程,如果flag == false,就强行终止myThread,并且自己随后结束。
捏造的信仰 2011-11-25
  • 打赏
  • 举报
回复
就楼主的描述看,很有可能是一个变量被拿来做多个用途了。这是编程的大忌。一个变量值应该做一种用途,否则很难看懂。建议楼主将逻辑剥离开来,最后形成像竹节一样的形式:
boolean canRun = check();
if (!canRun) {
return;
}

Object someResult = getSomeResult();
if (someResult == null) {
return;
}

...
ace62 2011-11-25
  • 打赏
  • 举报
回复
如果你的逻辑是要求每个step前需要flag为true,且每个step都可能改变flag,那么这个判断不能少
24K純帥 2011-11-25
  • 打赏
  • 举报
回复
step的if判断完全可以不要~

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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