在我开发过程中,碰到过这样一个问题,就是去执行多个并发任务,当所有任务执行完毕后,然后把执行完毕的结果要更新到表里面去。那我如何知道多个线程的任务已经全部执行完毕了呢?
今天介绍一个方法:CountDownLatch类
首先创建一个CountDownLatch对象
具体实现代码参考如下:
Thread thread1 = new Thread(new Runnable() {
@Override
public void run() {
while (i<10000){
i++;
}
mCountDownLatch.countDown();
}
});
thread1.start();
Thread thread2 = new Thread(new Runnable() {
@Override
public void run() {
while (k<10000){
k++;
}
mCountDownLatch.countDown();
}
});
thread2.start();
try {
mCountDownLatch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
关键的地方就在 new CountDownLatch(n),mCountDownLatch.countDown();和mCountDownLatch.await();
new CountDownLatch(n);
- 这个初始化的时候传入的n就是代表计数器是多少,
mCountDownLatch.countDown();
- 这个代码的作用就是如果当前计数器的值大于零,则将其减一,如果新的计数器值等于零,则释放所有等待的线程。计数器变为零后就不会再减了。如果当前计数器为零,则什么都不做。此方法不会阻塞。
mCountDownLatch.await();
- 这个代码的作用就是让当前线程等待,直到计数器的值变为零之后主线程就会被唤醒,继续执行其它代码
这个例子就解决了去执行多个并发任务,当所有任务执行完毕后去执行其他操作的问题了