【第21期】观点:人工智能到底用 GPU?还是用 FPGA?

第7章 取消与关闭

原创 2016年06月01日 00:30:38

第7章 取消与关闭

7.1 任务取消

7.1.1 中断

在Java的API或语言规范中,并没有将中断与任何取消语义关联起来,但实际上,如果在取消之外的其他操作中使用中断,那么都是不合适的,并且很难支持起更大的引用。

每个线程都有一个boolean类型的中断状态。当中断线程时,这个线程的中断状态将被设置为true.在Thread中包含了中断线程以及查询线程中断状态的方法。

Interrupt方法能中断目标线程。

isInterrupted方法将能返回目标线程的中断状态。

interrupted方法将清除当前线程的中断状态,并返回它之前的值,这也是清除中断状态的唯一方法。

*Thread中的中中断方法

public class Thread {

    public void interrupt() { ...}

    public boolean isInterrupted() {...}

    public static boolean interrupted() {...}

    ...

}

调用interrupt并不意味着立即停止目标线程正在进行的工作,而只是传递了请求中断的消息。

在使用静态的interrupted时应该小心,因为它会清除当前线程的中断状态。如果在调用interrupted时返回了true,那么除非你想屏蔽这个中断,否则必须对它进行处理——可以抛出InterruptedException,或者通过再次调用interrupt来恢复中断状态。

通常,中断是实现取消的最合理方式。

7.1.2 中断策略

由于每个线程都拥有各自的中断策略,因此除非你知道中断对该线程的含义,否则不应该中断这个线程。

7.1.3 响应中断

当调用可中断的阻塞函数时,有两种实用策略可用于处理InterruptedException:

*传递异常(可能在执行某个特定于任务的清除操作之后),从而使你的方法也成为可中断的阻塞方法。

*恢复中断状态,从而使调用栈中的上层代码能够对其进行处理。

7.1.4 示例:计时运行

7.1.5 通过Future来实现取消

ExecutorService.submit将返回一个Future来描述任务。Future拥有一个cancel方法,该方法带有一个boolean类型的参数mayInterruptIfRunning,表示取消操作是否成功。

如果mayInterruptIfRunning为true并且任务当前正在某个线程中运行,那么这个线程能被中断。

如果这个参数为false,那么意味着“若任务还没有启动,就不要运行它”

7.1.6 处理不可中断的阻塞

7.1.7 采用newTaskFor来封装非标准的取消

7.2 停止基于线程的服务

7.2.1 示例:日志服务

7.2.2 关闭ExecutorService

ExecutorService有两种关闭方法:使用shutdown正常关闭,以及使用shutdownNow强行关闭。

7.2.3 ”毒丸“对象

7.2.4 示例:只执行一次的服务

7.2.5 shutdownNow的局限性

7.3 处理非正常的线程终止

7.4 JVM关闭

7.4.1 关闭钩子

7.4.2 守护线程

7.4.3 终结器


版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

提高编程思想

虚函数和抽象函数有什么区别 虚函数是有代码的并明确允许子类去覆盖,但子类也可不覆盖,就是说可以直接用,不用重写 抽象函数是没有代码,子类继承后一定要重写 *********
  • xpp02
  • xpp02
  • 2012-02-05 14:18
  • 48

第7章 跨程序共享数据,探究

第7章 跨程序共享数据,探究 内容提供器  在上一章中我们学了Android数据持久化的技术,包括文件存储、SharedPreferences存 储、以及数据库存储。不知道你有没有发现,...

ARM ADS集成开发环境的使用

在这一章里,将介绍ARM开发软件ADS(ARM Developer Suite)。通过学习如何在CodeWarrior IDE集成开发环境下编写,编译一个工程的例子,使读者能够掌握在ADS软件平台下开发用户应用程序。本章还描述了如何使用AXD调试工程,使读者对于调试工程有个初步的理解,为进一步的使用和掌握调试工具起到抛砖引玉的作用。本章主要内容有:- ADS软件组成介绍- 使用ADS创建工程- 用AXD进行代码调试8.1 ADS集成开发环境组成介绍ARM ADS全称为ARM Developer Suite。是ARM公司推出的新一代ARM集成开发工

第7章:优化 (来自mysql手册)

原贴:http://dev.mysql.com/doc/refman/5.1/zh/optimization.html#order-by-optimization 第7章:优化 目录7.1. ...

java并发编程实战-第7章-取消与关闭

java并发编程实战-第7章-取消与关闭   java中没有一种安全的抢占式方式的,只有协作式      取消标志如果和阻塞方法一起使用,则会失效,如    public void run() {         try {             BigInteger p = BigInteger.ONE;             while
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)