Java併發程式設計(六)Lock介面
阿新 • • 發佈:2018-12-04
一、Lock介面的引入
由於synchronized關鍵字有些缺陷,如無法響應中斷等,出現了Lock介面。相對於synchronized,Lock有如下補充:
- Lock可以響應中斷;
- Lock可以得知執行緒是否已經獲得鎖;
- Lock可以提供更為複雜的讀寫鎖,以應對讀寫同時存在的場景。
Lock相對於synchronized還有如下區別:
- synchronized是Java關鍵字,是基於JVM層面實現的;而Lock是Java介面,基於JDK層面實現。
- 使用synchronized不用手動釋放鎖,而Lock則需要手動釋放(finally中),否則可能會產生死鎖。
二、lock介面介紹
Lock介面中,包括各種方式嘗試獲得鎖、釋放鎖和Condition物件。
public interface Lock { /** * 嘗試獲得鎖,不可中斷 */ void lock(); /** * 嘗試獲得鎖,可被中斷 * @throws InterruptedException */ void lockInterruptibly() throws InterruptedException; /** * 非阻塞方式嘗試獲得鎖 * @return */ boolean tryLock(); /** * 阻塞方式嘗試獲得鎖,如果超時,則放棄 * @param time * @param unit * @return * @throws InterruptedException */ boolean tryLock(long time, TimeUnit unit) throws InterruptedException; /** * 釋放鎖 */ void unlock(); /** * 返回一個Condition物件 * @return */ Condition newCondition(); }
參考文章:
https://www.cnblogs.com/wchxj/p/8049325.html