gpt4 book ai didi

multithreading - CountDownLatch 中 await() 的目的是什么?

转载 作者:行者123 更新时间:2023-12-02 03:07:21 36 4
gpt4 key购买 nike

我有以下程序,我在其中使用 java.util.concurrent.CountDownLatch 而没有使用 await() 方法它工作正常。
我是并发的新手,想知道 await() 的目的。在“CyclicBarrier”中,我可以理解为什么需要 await() 但为什么在“CountDownLatch”中?

程序,

CountDownLatchSimple 类

public static void main(String args[]) {
CountDownLatch latch = new CountDownLatch(3);
Thread one = new Thread(new Runner(latch),"one");
Thread two = new Thread(new Runner(latch), "two");
Thread three = new Thread(new Runner(latch), "three");

// Starting all the threads
one.start(); two.start(); three.start();

}

Runner 类实现了 Runnable
CountDownLatch latch;

public Runner(CountDownLatch latch) {
this.latch = latch;
}

@Override
public void run() {
System.out.println(Thread.currentThread().getName()+" is Waiting.");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
latch.countDown();
System.out.println(Thread.currentThread().getName()+" is Completed.");
}

输出
二是等待。
三是等待。
一个是等待。
一个是完成。
二是完成。
三是完成。

最佳答案

CountDownLatch 是同步原语,用于等待所有线程完成某些操作。

每个线程都应该通过调用 countDown() 方法来标记完成的工作。等待 Action 完成的人应该调用 await() 方法。这将无限期地等待,直到所有线程通过调用 countDown() 将工作标记为已处理。例如,主线程可以继续处理工作线程的结果。

因此,在您的示例中,在 await() 方法的末尾调用 main() 是有意义的:

latch.await();

注意:当然还有很多其他用例,它们不需要是线程,但是无论通常是异步运行的,同一个锁可以被同一个任务等递减几次。 以上仅描述了 CountDownLatch 的一个常见用例.

关于multithreading - CountDownLatch 中 await() 的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41866691/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com