Java并发-取消与关闭】的更多相关文章

如果外部代码可以再某个操作正常完成之前就将其置入"完成"状态,那么这个操作就是可以取消的.取消的原因有:用户请求取消.有时间限制的操作.应用程序事件.错误和关闭等 中断 如果使用某方法的任务调用了一个阻塞方法,那么任务可能永远都不会检查取消标志,那么操作永远都不会结束. 线程中断是一种协作机制,线程可以通过这种机制来通知另一个线程,告诉它在合适的或者可能的情况下停止当前工作,并转而执行其他的工作. 每个线程都有一个布尔型的中断状态,当中断线程时,这个线程的中断状态设置为TRUE.…
查看豆瓣读书 第六章 任务执行 大多数并发应用程序是围绕执行任务进行管理的.设计任务时,要为任务设计一个清晰的任务边界,并配合一个明确的任务执行策略.任务最好是独立的,因为这会提高并发度.大多数服务器应用程序都选择了下面这个自然的任务边界:单个客户请求.任务时逻辑上的工作单元,线程是使任务异步执行的机制.应用程序内部的任务调度,存在多种可能的调度策略:其中,最简单的策略是在单一的线程中顺序的执行任务.但它的吞吐量和响应性很差,一般只在特殊情况下使用:任务的数量很少但生命周期很长时,或者服务器只服…
    Java没有提供不论什么机制来安全地(抢占式方法)终止线程,尽管Thread.stop和suspend等方法提供了这种机制,可是因为存在着一些严重的缺陷,因此应该避免使用. 但它提供了中断Interruption机制,这是一种协作机制,可以使一个线程终止还有一个线程的当前工作. 一.任务取消 取消操作的原因: . 用户请求取消 . 有时间限制的操作 . 应用程序事件 . 错误 . 关闭 结束任务的四种方式: 1. run方法运行结束 2. 使用请求关闭标记(比如boolean开关) 3.…
一.任务的取消于关闭 1.中断Thread 1.每个线程都有一个boolean类型的中断状态.true则是中断状态中 interrupt:发出中断请求:isInterrupt:返回中断状态:interrupted:清除中断状态 2.JVM中的阻塞方法会检查线程中断状态,其响应方法为:清除中断状态,抛出InterruptedException异常,表示阻塞操作被中断结束 :但JVM不保证阻塞方法何时检测到线程的中断状态 3.中断的理解:不会真正的中断一个正在运行的线程,而只是发出请求,具体的中断由…
Java并发编程实践 目录 并发编程 01—— ThreadLocal 并发编程 02—— ConcurrentHashMap 并发编程 03—— 阻塞队列和生产者-消费者模式 并发编程 04—— 闭锁CountDownLatch 与 栅栏CyclicBarrier 并发编程 05—— Callable和Future 并发编程 06—— CompletionService : Executor 和 BlockingQueue 并发编程 07—— 任务取消 并发编程 08—— 任务取消 之 中断…
Java并发编程实践 目录 并发编程 01—— ThreadLocal 并发编程 02—— ConcurrentHashMap 并发编程 03—— 阻塞队列和生产者-消费者模式 并发编程 04—— 闭锁CountDownLatch 与 栅栏CyclicBarrier 并发编程 05—— Callable和Future 并发编程 06—— CompletionService : Executor 和 BlockingQueue 并发编程 07—— 任务取消 并发编程 08—— 任务取消 之 中断…
<java并发编程实战>的第7章是任务的取消与关闭.我觉得这一章和第6章任务执行同样重要,一个在行为良好的软件和勉强运行的软件之间的最主要的区别就是,行为良好的软件能很完善的处理失败.关闭和取消等过程. 一.任务取消 在java中没有一种安全的抢占式(收到中断请求就立刻停止)的方式来停止线程,因此也没有安全的抢占式方法来停止任务.只有一些协作式的机制,比如设置请求已取消的标识.在下面的例子中,PrimeGenarator持续的列出素数,直到它被取消.cancel方法将设置cancelled标识…
Java并发编程中,其中一个难点是对线程生命周期的理解,和多种线程控制方法.线程沟通方法的灵活运用.这些方法和概念之间彼此联系紧密,共同构成了Java并发编程基石之一. Java线程的生命周期 Java线程类定义了New.Runnable.Running Man.Blocked和Dead五种状态. New 当初始化了一个线程对象之后,线程就进入了New的状态.此时JVM会为其分配堆内存.初始化成员变量的值,获取当前线程为父线程. Runnable 当调用线程对象的start方法之后,就进入Run…
第7章 取消与关闭 这章的主要内容是关于如何使任务和线程安全,快速,可靠的停止下来. 7.1 任务取消 在Java中没有一种安全的抢占方式来停止线程,但是可以使用一些协作机制,比如: 让素数生成器运行1秒后取消(并不会刚好在运行1秒后停止,因为在请求取消的时刻和run方法中循环执行下一次检查之间可能存在延迟): -7.1.1 中断 上面的取消方法有个重要的问题是:如果任务中调用了一个阻塞方法,例如BlockingQueue.put,那么任务可能永远不会检查取消标志,因此永远不会结束.比如: 前面…
在第1篇中"并发框架基本示例",提到了Executors和ThreadPool.其中,还有个"定时调度"的方法,Executors.newScheduledThreadPool(10). // 可执行调度命令(定时+周期性)的线程池,拥有固定的线程数 // 重复执行,无穷尽 public static void scheduledThreadPool() { int initialDelay = 10; int period = 10; Executor execu…