JAVA并发编程学习笔记------结构化并发应用程序

1. Executor基于生产者-消费者模式,提交任务的操做至关于生产者,执行任务的线程至关于消费者,若是要在程序中实现一个生产者-消费者的设计,最简单的方式一般就是使用Executorjava

2. Executor的生命周期:
  为了解决执行任务的生命周期问题,Executor扩展了ExecutorService接口,添加了一些用于生命周期管理的方法,以下:框架

public interface ExecutorService extends Executor{
    void shutdown();
    List<Runnable> shutdownNow();
    boolean isShutDown();
    boolean isTerminated();
    boolean awaitTermination(long timeout, TimeUnit unit) throws     InterruptedException; 
}

  Executor执行的任务有4个生命周期阶段:建立、提交、开始、完成。
  在Executor框架中,已提交但还没有开始的任务能够取消,已开始的任务只有当它们能响应中断时,才能取消。取消一个已经完成的任务不会有任何影响。线程

3. Timer与SheduledThreadPoolExecutor相比,有以下不一样:
(1)Timer在执行全部定时任务时只会建立一个线程;
(2)Timer并不捕获异常,所以当TimerTask抛出未检查的异常时将终止定时线程。
(3)Timer支持基于绝对时间而不是相对时间的调度机制。设计

4. 线程的中断:
 Thread中的中断方法以下:blog

public class Thread{
    public void interrupt(){...}
    public boolean isInterrupted(){...}
    public static boolean interrupted(){...}
}

  阻塞库方法,如Thread.sleep(), Object.wait()等,都会检查线程什么时候中断,而且在发现中断时提早返回,它们在响应中断时执行的操做为:清除中断状态,抛出InterruptedException,表示阻塞操做因为中断而提早结束。
对中断操做的正确理解是:他不会真正的中断一个正在运行的进程,而是只发出中断请求,而后由线程在下一个合适的时刻中断本身。
使用静态的interrupted时应当心,由于它会清除当前线程中的中断状态。接口

相关文章
相关标签/搜索