版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011067966/article/details/84112511
取消和关闭
中断——一种协作机制,使线程能够要求另一个线程停止当前工作。
7.1 任务取消
当外部代码能够在活动自然完成之前,把它改为完成状态,那个这个活动被称为可取消的。
7.1.1 中断
线程中断方法:
中断并不会真正中断一个正在运行的线程,它仅仅发出中断请求,线程自己会在下一个方便的时刻中断。
中断是实现取消的最好选择。
7.1.2 中断策略
7.1.3 响应策略
7.1.5 通过Future取消
7.1.6 处理不可中断阻塞
对于不可中断阻塞,可以采取与中断类似手段,来确保可以停止这些线程。
7.1.7用newTaskFor 封装非标准取消
7.2 停止基于线程的服务
7.2.1 示例:日志服务
日志被分离到单独的线程,构成生产者——消费者模式。
7.2.2 关闭ExecutorService
7.2.3 致命药丸
另一种关闭生产者——消费者服务的方式是致命药丸。
致命药丸:一个可识别的对象,置于队列中,当你得到它,就意味着停止工作。
7.2.4 只执行一次的服务
使用私有Executor:
7.2.3 shutdownNow的局限性
7.3 处理反常的线程终止
7.3.1 未捕获异常的处理
未捕获的异常写入日志:
7.4 JVM关闭
JVM可以正常地关闭,也可以强行关闭。
7.4.1 关闭钩子
7.4.2 精灵线程
7.4.3 Finalizer
避免使用Finalizer。