Android CountDownLatch使用详解
时间: 2023-10-13 22:00:30 浏览: 225
CountDownLatch是Java中的一个同步工具类,用于控制多个线程的执行顺序。它通过一个计数器来实现,该计数器初始化为一个正整数,每当一个线程完成了自己的任务后,计数器的值就会减1。当计数器的值减到0时,所有等待的线程就会被唤醒继续执行。
在Android中,CountDownLatch可以用于等待多个异步操作完成后再执行某个任务,或者等待多个线程都达到某个状态后再继续执行。
下面是CountDownLatch的基本使用方法:
1. 创建CountDownLatch对象,并指定计数器的初始值。
```java
CountDownLatch latch = new CountDownLatch(3); // 计数器初始值为3
```
2. 在需要等待的地方调用`await()`方法,使当前线程进入等待状态,直到计数器值为0时才会继续执行。
```java
try {
latch.await(); // 等待计数器值为0
} catch (InterruptedException e) {
e.printStackTrace();
}
```
3. 在需要通知其他线程继续执行的地方调用`countDown()`方法,将计数器的值减1。
```java
latch.countDown(); // 计数器减1
```
下面是一个简单的示例,演示了如何使用CountDownLatch等待多个线程完成后再执行某个任务:
```java
import java.util.concurrent.CountDownLatch;
public class CountDownLatchExample {
public static void main(String[] args) {
final CountDownLatch latch = new CountDownLatch(3);
for (int i = 0; i < 3; i++) {
final int threadNum = i;
new Thread(() -> {
try {
Thread.sleep(1000);
System.out.println("Thread " + threadNum + " completed.");
latch.countDown();
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
}
try {
latch.await();
System.out.println("All threads completed. Start executing the task...");
// 执行任务
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
```
在上面的示例中,我们创建了一个初始值为3的CountDownLatch对象。然后创建了3个线程,每个线程会在执行完任务后将计数器减1。主线程调用`await()`方法等待计数器的值变为0,当所有线程都执行完任务后,主线程才会继续执行并输出"All threads completed. Start executing the task..."。
希望对你有所帮助!
阅读全文