什麼是 Lock()、UnLock()、ReentrantLock()、TryLock() 以及它與 Java 中的同步塊有何不同?]

已發表: 2020-07-05

在本教程中,我們將討論 Lock()、UnLock()、ReentrantLock()、TryLock() 以及它與 Java 中的同步塊有何不同。

如果您還有以下問題,那麼您來對地方了。

  • Java中的鎖
  • Java 鎖示例和並發鎖與同步
  • Java 並發教程——可重入鎖
  • 同步 – Java 的正確鎖定/解鎖用法
  • java - 同步與鎖定
  • java鎖解鎖示例
  • java中的鎖定機制
  • java lock 解鎖不同的線程

讓我們開始吧。 首先讓我們理解這些術語中的每一個,然後我們將回顧工作示例。

鎖():

java.util.concurrent.locks 。 鎖是一種線程同步機制,類似於同步塊,除了鎖可以比 Java 的同步塊更複雜。 它是一個接口和類,為鎖定和等待與內置同步和監視器不同的條件提供框架。

開鎖():

UnLock() 釋放對 Object 的鎖定。

重入鎖():

ReentrantLock由上次成功鎖定但尚未解鎖的線程擁有。 當鎖不被另一個線程擁有時,調用lock的線程將返回,成功獲取鎖。 如果當前線程已經擁有鎖,該方法將立即返回。

嘗試鎖定():

TryLock() 僅在調用時空閒時才獲取鎖。

提示-1

如果您只是鎖定一個對象,我更喜歡使用synchronized.

而使用同步,它非常清楚並且不可能出錯:

示例詳細信息:

  1. 創建類:CrunchifyLockTutorial.java
  2. 創建內部類:Company 和 CrunchifyLoop
  3. 從 Main 創建兩個 Company 類的對象
  4. 在這些對像上啟動 10 個線程循環
  5. 當 Company1 與 Company2 對話時,它會鎖定一個對象。 如果同時——如果Company2想與Company1交談,那麼它會說——衝突——鎖已經存在。 (兩家公司已經在談)。

輸出:

提示 2

您可以使用synchronizedvolatilewait低級原語來實現java.util.concurrent的實用程序所做的一切。