Android CountDownLatch的用法
时间: 2023-11-03 07:01:48 浏览: 164
在Android中,CountDownLatch可以用于线程的同步。它允许一个或多个线程等待其他线程完成操作后再继续执行。CountDownLatch维护一个计数器,通过调用countDown()方法来减少计数器的值,线程可以通过await()方法来等待计数器的值变为0。
在上述代码中,mLatchTest是一个CountDownLatch对象,通过调用mLatchTest.countDown()方法来减少计数器的值,在UI线程中对mTestFlag进行更新后,该值变为true,并且通过调用mLatchTest.await()方法来等待计数器的值变为0。
CountDownLatch与Thread.join()方法类似,但是CountDownLatch提供了更灵活的API。CountDownLatch可以手动控制调用countDown()方法的次数,也可以在一个线程中多次调用countDown()方法。而Thread.join()方法是不停地检查被join的线程是否存活,如果存活则让当前线程永远等待。
另外,CountDownLatch和CyclicBarrier都可以实现线程之间的等待,但侧重点不同。CountDownLatch一般用于一个或多个线程等待其他线程执行完任务后才执行,而CyclicBarrier一般用于一组线程互相等待至某个状态,然后这一组线程再同时执行。此外,CountDownLatch是减计数,计数减为0后不能重用,而CyclicBarrier是加计数,可以重复使用。
相关问题
android countdownlatch 使用
CountDownLatch是Java中的一种同步工具,用于等待指定数量的线程完成执行。在Android中同样可以使用CountDownLatch实现线程的并发控制。
使用CountDownLatch需要先创建一个CountDownLatch对象,并设置需要等待的线程数量。然后在需要等待的地方调用await()方法开始等待,直到所有线程执行完毕,CountDownLatch内部的计数器为0时,await()方法返回。
在每个需要等待的线程中,执行完后调用CountDownLatch的countDown()方法,将计数器减1。当计数器为0时,await()方法返回,程序继续执行下去。
下面是一个简单的示例代码,演示了如何使用CountDownLatch实现多个线程的同步执行。
```
public class CountDownLatchDemo {
private static final int THREAD_NUM = 3;
public static void main(String[] args) throws InterruptedException {
final CountDownLatch latch = new CountDownLatch(THREAD_NUM);
for (int i = 0; i < THREAD_NUM; i++) {
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Thread " + Thread.currentThread().getId() + " started.");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread " + Thread.currentThread().getId() + " finished.");
latch.countDown();
}
}).start();
}
latch.await();
System.out.println("All threads finished.");
}
}
```
在这个示例中,我们创建了3个线程,并设置CountDownLatch的计数器为3。在每个线程中,我们模拟了一段耗时操作,并在操作完成后调用了countDown()方法。在主线程中,我们调用了await()方法,等待所有线程执行完毕后再输出“All threads finished.”的提示消息。在运行示例程序的过程中,我们会发现所有的线程都是同时启动的,并在3秒钟后全部结束,主线程也在3秒钟后输出了提示信息。
总的来说,CountDownLatch是一个非常有用的工具,它可以方便地实现多个线程的同步执行。在Android开发中,我们可以将其应用于一些需要等待多个线程完成后再执行的场景,例如并发下载任务、多线程初始化等等。
Android CountDownLatch的用法示例
Android中的CountDownLatch是一个计数器,它可以用于控制多个线程的执行顺序。下面是一个使用CountDownLatch的示例:
```java
// 创建一个CountDownLatch实例,并设置计数器的初始值为3
CountDownLatch countDownLatch = new CountDownLatch(3);
// 定义三个线程
Thread thread1 = new Thread(new Runnable() {
@Override
public void run() {
// 线程1的任务
// ...
// 计数器减1
countDownLatch.countDown();
}
});
Thread thread2 = new Thread(new Runnable() {
@Override
public void run() {
// 线程2的任务
// ...
// 计数器减1
countDownLatch.countDown();
}
});
Thread thread3 = new Thread(new Runnable() {
@Override
public void run() {
// 线程3的任务
// ...
// 计数器减1
countDownLatch.countDown();
}
});
// 启动三个线程
thread1.start();
thread2.start();
thread3.start();
try {
// 等待计数器倒数到零,即等待三个线程执行完毕
countDownLatch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
// 三个线程执行完毕后,继续执行主线程的任务
```
阅读全文