Condition接口
简介:
可带条件的线程通知接口,需要用lock锁一起使用,实现比Object中线程通知方法更精细的控制。
Condition中的await()方法类似于Object的wait()方法。
Condition中的signal()方法类似于Object的notify()方法。
应用场景:
线程如果不满足某个Condition将被挂起,而等待中的线程如果满足某个Condition将被唤醒。
Lock接口
简介:
包中所有锁的接口,主要实现加锁,解锁,尝试锁定,等更细粒度的锁操作。
public interface Lock {
void lock();//锁定
void lockInterruptibly() throws InterruptedException; // 可中断
boolean tryLock();//尝试锁定
boolean tryLock(long time, TimeUnit unit) throws InterruptedException; //可中断尝试锁定
void unlock();//解锁
Condition newCondition();//返回条件对象
}
应用场景:
相比Synchronized,能更细粒度操作锁,比如可在代码段之间加锁; 可让阻塞线程中断; 可区分读写操作; 可以判断线程是否获取到锁等; 从而实现更优雅的同步方案。
ReadWriteLock接口
简介:
读写锁接口,通过分开的读锁与写锁,控制锁阻塞的范围,读锁之间不相互阻塞,提高程序执行效率。
如下源码所示:
public interface ReadWriteLock {
Lock readLock();
Lock writeLock();
}
LockSupport类
锁工具类,基本方法park和unpark。park会把使得当前线程阻塞,而unpark可以精确的控制放开某个线程的阻塞。
如下图所示:
public native void unpark(Thread jthread);
public native void park(boolean isAbsolute, long time);
AbstractOwnableSynchronizer类
简介:
基础的同步器虚拟类,可以由线程以独占方式拥有的同步器。此类为创建锁和相关同步器,提供了基础。
AbstractQueuedSynchronizer类
简介:
提供了一个先进先出队列作为存放等待线程的工具,然后这样每次拥有锁的线程完成后,直接唤醒下一个线程即可。
AbstractQueuedLongSynchronizer类
简介:
状态相关的参数和结果都定义为 long 而不是 int。其他与上面的类完全一致。
ReentrantLock类
简介:
可重入锁,即当一个线程已经获得一个lock的时候,该线程再次请求该锁的时候,会立即通过,不需要再锁定或等待。
ReentrantReadWriteLock类
简介:
ReentrantReadWriteLock同时事共享锁(读取锁)和独占锁(写入锁),是比较复杂的使用方式。
附图
concurrent包
感兴趣的小伙伴请关注本人公众号:暖爸的java家园
领取专属 10元无门槛券
私享最新 技术干货