1、临时 需要整理

juc包主要包括:
1.原子类(AtomicXXX)
2.锁类(XXXLock)
3.线程同步类(AQS、CountDownLatch、CyclicBarrier、Semaphore、Exchanger)
4.任务执行器类(Executor体系类,包括今天的主角ThreadPoolExecutor)
5.并发集合类(ConcurrentXXX、CopyOnWriteXXX)相关集合类
6.阻塞队列类(BlockingQueue继承体系类)
7.Future相关类
8.其他一些辅助工具类

与Java内置锁不同,JUC 显示锁是一种非常灵活的、使用纯Java语言实现的锁,这种锁的使用非常灵活,可以进行无条件的(没有同步方法/代码块内限制)、可轮询的(CAS自旋)、定时的(限时抢锁)、可中断的 (抢锁可中断方法在抢锁过程中可以响应中断信号)锁获取和释放操作。由于JUC锁加锁和解锁的方法都是通过Java API显示进行的,因此也叫做显示锁。
使用Java内置锁时,不需要通过Java代码显示地对同步对象的监视器进行抢占和释放,这些工作由JVM底层完成,而且任何一个Java对象都能作为一个内置锁使用,所以Java的对象锁使用起来非常方便。但是,Java内置锁的功能相对单一,不具备一些比较高级的锁功能,比如:
限时抢锁:在抢锁时设置超时时长,如果超时还未获得锁就放弃,不至于无限等下去。
可中断抢锁:在抢锁时,外部线程给抢锁线程发一个中断信号,就能 唤起等待锁的线程,并终止抢占过程。
多个等待队列:为锁维持多个等待队列,以便提高锁的效率。比如在生产者-消费者模式实现中,生成和消费者共用一把锁,该锁上维持两个等待队列,即一个生产者队列和一个消费者队列。
除了以上功能问题之外,Java对象锁还存在性能问题。在竞争稍微激烈的情况下,Java对象锁会膨胀为重量级锁(基于操作系统实现)而重量级锁的线程阻塞和唤醒操作需要进程在内核态和用户态之间来回切换,导致其性能非常低。所以,迫切需要提供一种新的锁来提升争用激烈场景下锁的性能。
Java显示锁就是为了解决这些Java对象锁的功能问题、性能问题而生的。jdk1.5引入了Lock接口,Lock是Java代码级别的锁。
JUC包中提供了一系列的显示锁实现类(如ReentrantLock),当然也允许应用程序提供自定义的锁实现类。 — lock 也是 可程序员编程的锁。