java 如何强行终止一个线程?(线程阻塞,所以不能用标志自然终止)

delphigo 2010-09-01 10:54:26
run代码如下,使用flag标志来控制线程的启停,但现在是线程不知什么原因阻塞在了业务代码,也就是说线程本身已经无法走到判断flag代码的地方了。
此时另一个监视线程判断这个线程阻塞后要杀掉这个阻塞线程然后重新启动一个线程,但现在不知如何强行终止这个线程。
已知的方法有:
1、stop()方法,但官方不推荐这么做;
2、interrupt()方法,老实说不知道和stop的区别,以为一样,但执行就报如下异常。
java.lang.InterruptedException: sleep interrupted
at java.lang.Thread.sleep(Native Method)

别的就不知有什么方法了,有没有类似unix下kill -9之类效果的方法?

run(){
while(flag){
//线程代码,通过webservice读写外网服务器数据,处理业务。
}
}

谢谢!
...全文
4983 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
a582188491 2011-09-21
  • 打赏
  • 举报
回复
直接按退出
jjiiaaww 2010-10-30
  • 打赏
  • 举报
回复
我也碰到这个问题了 ,特地来看看
delphigo 2010-09-02
  • 打赏
  • 举报
回复
虽然没有最终的结果,但基本确定了nickycheng提供的方法是可行的。
结贴散分。
macrotea-cn 2010-09-01
  • 打赏
  • 举报
回复
我也碰到楼主这样的问题
就是线程内出现了异常
因此导致线程无法回到标志变量那里进行判断
帮顶!
nickycheng 2010-09-01
  • 打赏
  • 举报
回复
总体原则还是应该需要提供一个变量,通过在线程内检查这个变量来判断是否应该停止这个线程,并有序的处理线程内的事务。
你所遇到的问题就是如何使用interrupt();当外部执行了interrupt(),那么在线程中如果正好在sleep就会碰到这个问题,我们需要catch这个错误,如果遇到sleep时抛InterruptedException,我们就知道是外面调用了interrupt,这时候该结束线程运行了。(调用interrupt会结束所有的阻塞,并在阻塞地抛异常)

下面是api的说明:

如果线程在调用 Object 类的 wait()、wait(long) 或 wait(long, int) 方法,或者该类的 join()、join(long)、join(long, int)、sleep(long) 或 sleep(long, int) 方法过程中受阻,则其中断状态将被清除,它还将收到一个 InterruptedException。

如果该线程在可中断的通道上的 I/O 操作中受阻,则该通道将被关闭,该线程的中断状态将被设置并且该线程将收到一个 ClosedByInterruptException。

如果该线程在一个 Selector 中受阻,则该线程的中断状态将被设置,它将立即从选择操作返回,并可能带有一个非零值,就好像调用了选择器的 wakeup 方法一样。

nickycheng 2010-09-01
  • 打赏
  • 举报
回复
仔细看看这篇博文:
http://www.blogjava.net/jinfeng_wang/archive/2008/04/27/196477.html
nj_dobetter 2010-09-01
  • 打赏
  • 举报
回复
是用interrupt()中止线程,我看Android里面的Java代码就是这么中止一个运行着的线程的。
至于为什么会抛出异常,要查一下什么原因了
gxd305 2010-09-01
  • 打赏
  • 举报
回复
你应该要捕获 这个异常的啊,如果发生这个异常就退出不就行了吗?
ChDw 2010-09-01
  • 打赏
  • 举报
回复
在你的线程中,如果已经抛出了InterruptedException,那说明这个线程应该要结束了。你就应该退出循环并释放相应的资源了。
zhouxuelong1 2010-09-01
  • 打赏
  • 举报
回复
也碰到楼主这样的问题
delphigo 2010-09-01
  • 打赏
  • 举报
回复
非常感谢楼上各位,尤其是nickycheng,我会按照你提供的办法去试一下,如果成功了就回来结贴给分。
再次感谢各位!

62,635

社区成员

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

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