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


    1. Executor基于生产者-消费者模式,提交任务的操作相当于生产者,执行任务的线程相当于消费者,如果要在程序中实现一个生产者-消费者的设计,最简单的方式通常就是使用Executor

    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中的中断方法如下:

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

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

  • 相关阅读:
    poj 3261 Milk Patterns
    poj 3292 Semi-prime H-numbers
    bzoj千题计划256:bzoj2194: 快速傅立叶之二
    bzoj千题计划255:bzoj3572: [Hnoi2014]世界树
    bzoj千题计划254:bzoj2286: [Sdoi2011]消耗战
    bzoj千题计划253:bzoj2154: Crash的数字表格
    扩展BSGS算法
    bzoj千题计划252:bzoj1095: [ZJOI2007]Hide 捉迷藏
    bzoj千题计划251:bzoj3672: [Noi2014]购票
    bzoj千题计划250:bzoj3670: [Noi2014]动物园
  • 原文地址:https://www.cnblogs.com/hunterCecil/p/8387066.html
Copyright © 2020-2023  润新知