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读写外网服务器数据,处理业务。
}
}

谢谢!
...全文
5092 12 打赏 收藏 举报
写回复
用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,我会按照你提供的办法去试一下,如果成功了就回来结贴给分。
再次感谢各位!
数据集可视化效果见下方。 【数据集概况】 · 检测类别(中文):[公交车(bus), 车辆(vehicle)] · 训练集:1899 张 · 验证集:0 张 · 测试集:0 张 · 总计:1899 张 该数据集聚焦于城市道路环境下的车辆检测任务,旨在为智能交通系统提供高质量的标注数据支持。通过采集真实道路场景中的各类车辆图像,该数据集能够有效支撑车辆识别与分类模型的训练与优化,具有较高的实用价值和研究意义。数据集覆盖了多种车辆类型,包括公交车和普通车辆,为复杂交通环境下的目标检测提供了丰富的样本。... 【训练曲线与评估图】 【模型训练配置】 参数 | 值 模型 | yolo26n 训练轮数 | 100 epochs 输入尺寸 | 640x640 批次大小 | 24 优化器 | auto 初始学习率 | 0.01 训练设备 【关键指标汇总】 训练了 96 个 epoch,最终轮指标: 指标 | 数值 mAP50 | **0.9950** mAP50-95 | 0.9884 Precision | 0.9513 Recall | 0.9659 train/box_loss | 0.0783 train/cls_loss | 0.0416 val/box_loss | 0.1259 val/cls_loss | 0.0771 【训练过程分析】 96 轮训练后 mAP50 达到 0.9950,模型收敛良好。Loss 曲线前段快速下降,后段趋于平稳,val_loss 无反弹,没有明显过拟合。mAP50-95 为 0.9884,和 mAP50 差距仅 0.01,框的定位精度也很扎实。 【模型性能评估】 Precision 0.9513、Recall 0.9659,精召双高,模型对公交车、车辆的检测能力强。多类检测中,不同类别性能可能有差异,需关注难例类别的表现。 【预测效果展示...

62,620

社区成员

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

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