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
有用的方法
Sr.No | 函数名称 & 描述 |
---|---|
1 | await() 等待锁存器的计数达到零后再继续 |
2 | countDown() 递减倒计时锁存器 |
3 | trySetCount(int count) 设置锁存器的计数 |
4 | getCount() 获取锁存器的当前计数 |
hazelcast_data_structures.html