JUC框架
Condition
Condition
为接口类型,它将 Object 监视器方法(wait、notify 和 notifyAll)分解成截然不同的对象,以便通过将这些对象与任意 Lock 实现组合使用,为每个对象提供多个等待 set (wait-set)。其中,Lock 替代了 synchronized 方法和语句的使用,Condition 替代了 Object 监视器方法的使用。可以通过await(),signal()来休眠/唤醒线程。
Lock
Lock
为接口类型,Lock
实现提供了比使用synchronized
方法和语句可获得的更广泛的锁定操作。此实现允许更灵活的结构,可以具有差别很大的属性,可以支持多个相关的Condition
对象。
ReadWriteLock
ReadWriteLock
为接口类型,维护了一对相关的锁,一个用于只读操作,另一个用于写入操作。只要没有writer,读取锁可以由多个reader线程同时保持。写入锁是独占的。
AbstractOwnableSynchonizer
AbstractOwnableSynchonizer
为抽象类,可以由线程以独占方式拥有的同步器。此类为创建锁和相关同步器(伴随着所有权的概念)提供了基础。AbstractOwnableSynchronizer
类本身不管理或使用此信息。但是,子类和工具可以使用适当维护的值帮助控制和监视访问以及提供诊断。
AbstractQueuedLongSynchronizer
AbstractQueuedLongSynchronizer
为抽象类,以long形式维护同步状态的一个 AbstractQueuedSynchronizer
版本。此类具有的结构、属性和方法与 AbstractQueuedSynchronizer
完全相同,但所有与状态相关的参数和结果都定义为 long 而不是 int。当创建需要64位状态的多级别锁和屏障等同步器时,此类很有用。
AbstractQueuedSynchonizer
AbstractQueuedSynchonizer
为抽象类,其为实现依赖于先进先出 (FIFO) 等待队列的阻塞锁和相关同步器(信号量、事件,等等)提供一个框架。此类的设计目标是成为依靠单个原子 int 值来表示状态的大多数同步器的一个有用基础。
LockSupport
LockSupport
为常用类,用来创建锁和其他同步类的基本线程阻塞原语。LockSupport
的功能和”Thread中的Thread.suspend()
和Thread.resume()
有点类似”,LockSupport
中的park()
和unpark()
的作用分别是阻塞线程和解除阻塞线程。但是park()
和unpark()
不会遇到“Thread.suspend
和Thread.resume
所可能引发的死锁”问题。
CountDownLatch
CountDownLatch
为常用类,它是一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。
Semaphore
Semaphore
为常用类,其是一个计数信号量,从概念上讲,信号量维护了一个许可集。如有必要,在许可可用前会阻塞每一个acquire()
,然后再获取该许可。每个 release()
添加一个许可,从而可能释放一个正在阻塞的获取者。但是,不使用实际的许可对象,Semaphore
只对可用许可的号码进行计数,并采取相应的行动。通常用于限制可以访问某些资源(物理或逻辑的)的线程数目。
CyclicBarrier
CyclicBarrier
为常用类,其是一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier
很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。
ReentrantLock
ReentrantLock
为常用类,它是一个可重入的互斥锁 Lock,它具有与使用 synchronized
方法和语句所访问的隐式监视器锁相同的一些基本行为和语义,但功能更强大。
ReentrantReadWriteLock
ReentrantReadWriteLock
是读写锁接口ReadWriteLock
的实现类,它包括Lock
子类ReadLock
和WriteLock
。ReadLock
是共享锁,WriteLock
是独占锁。