countdownlatch的await方法
时间: 2023-05-02 14:00:57 浏览: 114
CountDownLatch类的await方法会使当前线程等待,直到计数器的值变为0。换句话说,它将阻塞当前线程,直到其他线程完成所需的操作并调用了CountDownLatch类的countDown方法来减少计数器的值。
相关问题
CountDownLatch await() 是起什么作用的
CountDownLatch是Java中的一个同步工具类,它可以让一个或多个线程等待其他线程完成操作后再执行。其中await()方法就是用来阻塞当前线程,直到CountDownLatch中的计数器减为0才会继续执行。
具体来说,CountDownLatch中的计数器初始值为一个正整数,每当一个线程完成了自己的任务后,就会调用CountDownLatch的countDown()方法将计数器减1。而在另一个或多个线程中,调用await()方法的线程会被阻塞,直到计数器减为0才会继续执行。
举个例子,假设有一个任务需要等待两个子任务完成后才能执行,那么可以使用CountDownLatch来实现。首先创建一个CountDownLatch对象,计数器初始值为2,然后将这个对象传递给两个子任务。每个子任务完成后,都会调用countDown()方法将计数器减1。最后在主任务中调用await()方法,主任务会被阻塞,直到两个子任务都完成后计数器减为0才会继续执行。
下面是一个简单的示例代码:
```java
import java.util.concurrent.CountDownLatch;
public class CountDownLatchDemo {
public static void main(String[] args) throws InterruptedException {
CountDownLatch latch = new CountDownLatch(2);
new Thread(() -> {
// 子任务1
System.out.println("子线程1执行完毕");
latch.countDown();
}).start();
new Thread(() -> {
// 子任务2
System.out.println("子线程2执行完毕");
latch.countDown();
}).start();
latch.await();
// 主任务
System.out.println("所有子线程执行完毕");
}
}
```
CountDownLatch.await
CountDownLatch.await() 是一个 Java 多线程编程中的方法,它用于阻塞当前线程,直到计数器减为零。
在使用 CountDownLatch 时,我们可以通过调用 await() 方法来使当前线程阻塞,直到计数器的值减为零。当计数器为零时,await() 方法会返回,当前线程可以继续执行。
通常情况下,我们会在一个或多个线程中调用 CountDownLatch.countDown() 方法,每次调用都会使计数器减一。当所有的线程都调用了 countDown() 方法,并且计数器的值变为零时,await() 方法会返回,当前线程可以继续执行。
使用 CountDownLatch 可以实现一些并发控制的场景,比如等待多个线程完成某个任务后再进行下一步操作。
阅读全文