标签:队列 -- CAS 线程 公平 多线程 等待 tryLock
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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。