java并发编程实战笔记(二)任务取消

概述

java中没有安全的抢占方式来停止线程,因此也就没有安全的抢占方式来取消任务。任务取消需要一些协作式的机制来进行。

中断

线程中断是一种协作机制,线程可以通过这种机制通知另一个线程,告诉它在合适的或者可能的情况下停止当前工作,并转而执行其他的工作。

Thread的中断方法

public class Thread{
    public void interrupt() {...} //中断线程(只是传递了请求中的中断信息)
    public boolean isInterrupt() {...} //返回目标线程的中断状态
    public static boolean interrupted() {...} //清除当前的中断状态,并返回之前的值(清除中断状态的唯一方法)
}

说明: 调用interrupt()并不意味着 立即停止目标线程 正在进行的工作,而只是传递了请求中的中断信息。
阻塞库方法,例如Thread.sleep和Object.wait等,都会坚持线程何时中断,并在发现中断时提起返回。它们在相应中断时执行的操作包括:清除中断状态,抛出InterruptedException。大多数可阻塞的库函数都只是抛出InterruptedException异常,这是比较合理的中断策略

中断策略

最合理的中断策略:某种形式的线程级取消操作或者服务级取消操作尽快退出,在必要时进行清理,通知某个线程所有者该线程已经退出。
任务和线程 对中断的反应:任务不会在自己拥有的线程中执行,而是在某个服务拥有的线程中执行。对于非线程所有者的代码来说,应该小心的保存中断状态,这样拥有线程的 代码才能对中断做出反应。因此,大多数可阻塞的库函数只是抛出InterruptedException异常作为中断响应。

当你为一户人家打扫房屋时,即使主人不在,也不应该把这段时间收到的邮件扔掉,而应该把邮件保存起来等主人回来后交给他们处理,尽管你可以阅读他们的杂志。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值