Java中Thread的终止问题,stop(),interrupt()

safewolf 2010-06-27 10:53:55
最近开始做java项目,涉及多线程问题,有一事不太明白


网上说不推荐用thread.stop()
应该用thread.interrupt()

但是实际中发现如果thread没有用到sleep(),是不能被catach到InterruptException的

那我如果在thread中就是个while(true)的循环,而且里面没有用到Thread.sleep()

但是我又想随时中断thread,而不是一个循环做完后通过一个while(stopped)来控制

应该怎么做呢?
...全文
1992 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
messihahahehe 2010-06-29
  • 打赏
  • 举报
回复
使用一个标记变量标记while(true),如果希望停止则将标记赋值为false,即可,不要使用线程的强制方法,容易出现不可预期的错误.
lixkyx 2010-06-29
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 messihahahehe 的回复:]

使用一个标记变量标记while(true),如果希望停止则将标记赋值为false,即可,不要使用线程的强制方法,容易出现不可预期的错误.
[/Quote]

同意。我也打算说的,看到兄台已经发过了。
清峰 2010-06-28
  • 打赏
  • 举报
回复
boolean isTrue = true;

while(isTrue){

//do sth
}
//当要停止线程时,将
isTrue = false;
「已注销」 2010-06-28
  • 打赏
  • 举报
回复
while(true){
if(Thread.interrupted())
break;
//do sth here
...
...
}
重名率太高 2010-06-28
  • 打赏
  • 举报
回复
可以尝试把while(true)中的true用一个变量保存起来,在while循环中控制循环的进行,然后在尝试对THREAD进行终止的操作
工布之者 2010-06-28
  • 打赏
  • 举报
回复
学习中
弘石 2010-06-28
  • 打赏
  • 举报
回复
如果线程正在处理数据,立即中断可能会导致错误数据
所以使用while(stopped),设置stopped后,如果正在处理数据,在处理完后会退出

当然,如果线程正在sleep,应该立即唤醒
xqyky 2010-06-28
  • 打赏
  • 举报
回复
今天第二次看到线程的问题。再说一次吧。

永远不要用stop()。

interrupt()是在有block method时用的,如sleep()。

终结线程的唯一方法是让run()跑完。
zhanlang9075 2010-06-28
  • 打赏
  • 举报
回复
来关注一下关于多线程的帖子,以便更好的学习。
  • 打赏
  • 举报
回复
或者你使用 Thread#isInterrupted() 方法,如果只想使用 while(true) 的话就甭想了,做不到。
  • 打赏
  • 举报
回复
做不到,不可能

62,636

社区成员

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

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