1. 程式人生 > >Java併發程式設計(六)Lock介面

Java併發程式設計(六)Lock介面

一、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