多线程与高并发(三)--基于CAS的新类型锁
作者:互联网
ReentrantLock
- 可重入锁(synchronized也是可重入锁)
- 必须手动释放锁,使用synchronized如果遇到异常会自动释放锁,但是reentrantLock必须手动释放,因此需要在finally中进行锁的释放。
- 可以使用tryLock进行尝试锁定,不管锁定与否,方法都将继续进行。可以根据tryLock的返回值来判定是否锁定,也可以指定tryLock的时间。
- 使用ReentrantLock还可以调用lockInterruptibly方法,可以对线程interrupt方法做出响应,在一个线程等待锁的过程中,可以被打断。
- 可以指定为公平锁
CountDownLatch
使一个线程等待其他线程各自执行完毕后再执行。
CyclicBarrier
- 让所有线程都等待完成后才会继续下一步行动。
- CyclicBarrier可以用于多线程计算数据,最后合并计算结果的应用场景。
Phaser
使用场景为N个线程分阶段并行的问题--多人闯关。
ReadWriteLock
- 读锁:共享锁
- 写锁:排他锁
Semaphore
控制同时访问特定资源的线程数量--限流
公平锁
在发生线程争用时,未获取到锁的线程会在等待队列中等待。如果是公平锁,新发出请求的线程会先判断等待队列中是否有线程在等待,如果有就进入等待队列中等待,不会直接去争抢锁。如果是非公平锁,会直接尝试去获取锁。获取锁前会判断队列中是否有线程在等待是判断公平锁与非公平锁的关键。
标签:队列,--,CAS,线程,公平,多线程,等待,tryLock 来源: https://www.cnblogs.com/liu-feng/p/14399880.html