Java-ReentrantLock初探
生活随笔
收集整理的這篇文章主要介紹了
Java-ReentrantLock初探
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
什么是Reentrantlock?
? ?Reentrantlokc基于AQS. 在并發編程中,它可以實現公平鎖和非公平鎖來對共享資源進行同步.? 同時,和synchronized一樣, Reentrantlock支持可重入. 除此之外,Reentrantlock在調度上更靈活,支持更多豐富的功能.
?
?
ReentrantLock實現了Lock接口,因此我們有必要了解一下Lock接口定義的方法.
package java.util.concurrent.locks; import java.util.concurrent.TimeUnit;/**** @see ReentrantLock* @see Condition* @see ReadWriteLock** @since 1.5* @author Doug Lea*/ public interface Lock {/**獲取鎖,假如當前鎖被其他線程占用,那么將會等待,知道獲取為止.*/void lock();/**和lock()方法一樣,也是獲取鎖. 區別在于假如當前線程在等待鎖的過程中被中斷.那么將會退出等待,并且拋出中斷異常.*/void lockInterruptibly() throws InterruptedException;/**嘗試獲取鎖,并立即返回.返回值是boolean類型,代表是否獲得鎖.*/boolean tryLock();/**在一段時間內,嘗試獲取鎖.假如期間被中斷,那么會拋出中斷異常.*/boolean tryLock(long time, TimeUnit unit) throws InterruptedException;/*** 釋放鎖*/void unlock();/*** 新建一個綁定在當前lock上的Condition對象. Condition對象簡單來說,表示一個等待狀態.獲得鎖的線程可能在某些時刻需要等待一些條件的完成才能繼續執行. 那么它可以通過await方法注冊在condition對象上進行等待.然后通過condition對象的signal方法將其喚醒. 一個Lock對象可以關聯多個Condition對象. 多個線程可以被綁定在不同的Condition對象上,這樣就可以分組喚醒.此外Condition還提供了和限時,中斷相關的功能,豐富了線程的調度策略.*/Condition newCondition(); }?
可重入性
? 在并發編程中,可重入性指的是“單個線程執行時,重新進入同一個子程序仍然是線程安全的”.? 比如A線程在某上下文中獲取了某鎖.當A線程想要再次獲取該鎖時,不會因為鎖已經被自己占用,而需要先等待鎖的釋放.
? 假如A已經獲得了鎖,又在等待自己釋放鎖.那么就會造成死鎖.? 可重入性簡單來說就是一個線程可以不用釋放,而重復獲取一個鎖n次, 只是在釋放的時候,也需要相應釋放n次.
?
?
?
?
?
? ? ??
總結
以上是生活随笔為你收集整理的Java-ReentrantLock初探的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java源码-AQS机制
- 下一篇: Java-CAS初探