找回密码
 FreeOZ用户注册
查看: 1077|回复: 0
打印 上一主题 下一主题

Interruption Policy

[复制链接]
跳转到指定楼层
1#
发表于 5-8-2009 08:23:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?FreeOZ用户注册

x
原文在这里:
http://www.nofluffjuststuff.com/ ... ption_handling.html

Java并没有提供一种安全的抢占式线程中断方式(注意,Thread.stop()已经被deprecated),
而是由程序自身通过逻辑处理,“自愿”中断。

在《Java Concurrency in Practice》中有介绍cancellation和interruption两种方式。基本上最终
采用的就是interruption方式:
1. 向线程发送Thread.interrupt()
2. 由线程自身判断和处理这个中断要求

需要注意的是,Thread.interrupt()并不是抢占式的,简单地说,接收到interrupt的线程并不会马上停止:
1. 如果该线程正在执行sleep, wait, join,则会抛出InterruptedException
2. 其他情况下,线程只会设置一个interrupted的标志,让后面的逻辑进行处理

无论是抛出InterruptedException还是逻辑检测到interrupted标志,我们都需要针对不同的程序需求定义
相应的interruption policy,可选的方案如下:
1. 处理后事方案:把要处理的事情处理好,然后退出线程
2. 暴力方案:propagate InterruptedException到上一级处理逻辑
3. 非暴力不合作方案:设置interrupted标志,让别人去处理。这个就需要用Thread.currentThread().interrupt()来执行了
4. 知道了方案:静悄悄地,静悄悄地,俺继续
回复  

使用道具 举报

您需要登录后才可以回帖 登录 | FreeOZ用户注册

本版积分规则

小黑屋|手机版|Archiver|FreeOZ论坛

GMT+10, 24-4-2025 05:56 , Processed in 0.010952 second(s), 16 queries , Gzip On, Redis On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表