Java中的Lock和Synchronized都可以用來實現多線程之間的同步,它們的作用都是實現線程之間的互斥訪問。
Lock是JDK5中新增的一種鎖機制,相比于Synchronized鎖來說,Lock鎖有以下幾個優點:
- 嘗試去獲取鎖,可以不成功,而Synchronized鎖必須成功地獲取鎖。 - Lock鎖可以被中斷,而Synchronized鎖不行。 - 可以通過tryLock()方法來避免死鎖情況,而Synchronized鎖遇到死鎖就會一直等待。
下面是使用Lock鎖的示例代碼:
Lock lock = new ReentrantLock(); public void method() { lock.lock(); //獲取鎖 try { //需要同步的代碼塊 } finally { lock.unlock(); //釋放鎖 } }
上述代碼中,通過lock()方法來獲取鎖,執行完需要同步的代碼塊后,通過unlock()方法來釋放鎖。
需要注意的是,使用Lock鎖的過程中,需要保證lock()和unlock()的成對出現,否則可能會導致死鎖。