Hazelcast - ICountDownLatch



java.util.concurrent.CountDownLatch 為執行緒提供了等待方式,而其他執行緒在 JVM 的多執行緒環境中完成一組操作。

類似地,ICountDownLatch 提供了 Java CountDownLatch 的分散式版本。它提供了類似的功能:setCount、countDown、await 等。

ICountDownLatch 和 Java CountDownLatch 之間的一個主要區別在於 Java CountDownLatch 提供了對單個 JVM 中執行緒的關鍵部分的保護,而 ICountDownLatch 為單個 JVM 和多個 JVM 中的執行緒提供了同步。

ICountDownLatch 有一個同步備份,這意味著如果我們有設定,例如,執行 5 個 JVM,則只有兩個 JVM 將持有此鎖定。

設定鎖定及等待鎖定

讓我們在兩個 JVM 上執行以下程式碼。一個上執行主程式碼,另一個上執行工作執行緒程式碼。此程式碼旨在讓工作執行緒等待,直到主執行緒完成。

示例

第一部分是建立鎖定並進行倒計時的主程式碼。

public static void main(String... args) throws IOException, InterruptedException {
   //initialize hazelcast instance
   HazelcastInstance hazelcast=Hazelcast.newHazelcastInstance();
   // create a lock
   ICountDownLatch countDownLatch=hazelcast.getCountDownLatch("count_down_1");
   System.out.println("Setting counter");
   countDownLatch.trySetCount(2);
   Thread.sleep(2000);
   System.out.println("Counting down");
   countDownLatch.countDown();
   Thread.sleep(2000);
   System.out.println("Counting down");
   countDownLatch.countDown();
   System.exit(0);
}

第二部分是建立鎖定並進行倒計時的工作執行緒程式碼。

public static void main(String... args) throws IOException, InterruptedException {
   //initialize hazelcast instance
   HazelcastInstance hazelcast = Hazelcast.newHazelcastInstance();
   // create a lock
   ICountDownLatch countDownLatch=hazelcast.getCountDownLatch("count_down_1");
   countDownLatch.await(5000, TimeUnit.MILLISECONDS);
   System.out.println("Worker successful");
   System.exit(0);
}

輸出

程式碼的輸出顯示工作執行緒僅在倒計時完成到 0 之後才打印。

Setting counter
Counting down
Counting down
Worker successful

有用方法

序號 函式名稱及說明
1

await()

等待鎖定的計數達到零再繼續

2

countDown()

遞減倒計時鎖定

3

trySetCount(int count)

設定鎖定的計數

4

getCount()

獲取鎖定的當前計數

hazelcast_data_structures.htm
廣告
© . All rights reserved.