[java]java并发编程中CountDownLatch

2014-11-24 03:13:50 · 作者: · 浏览: 0

问题出现场景:

在我的工作中,有这样的一种情况--游戏和服,我们的处理是:主线程中分开分线程,每个分线程处理30个账号信息。

当需要整体修改处理完的数据,就必须在主线程中进行操作。

所以要确保分线程全部执行完。

那么就用到:CountDownLatch


jdk中CountDownLatch类
常用的构造方法:CountDownLatch(int count);
常用的方法:await()和countdown()
其中count是一个计数器中的初始化数字,比如初始化的数字是2,当一个线程里调用了countdown(),则这个计数器就减一,当线程调用了await(),则这个线程就等待这个计数器变为0,当这个计数器变为0时,这个线程继续自己下面的工作。

主线程:
... ...
long threadCount = mergeServer.start(time);
if(threadCount<=0){
System.out.println("所有账号合并完成,进行合并后续操作...");
}
... ...
分线程: public long start(final long time) {
... ...
CountDownLatch latch = new CountDownLatch(threadNum);
for (int i = 0; i < threadNum; i++) {
Thread thread = new UserThread(latch, start, num, size, userIds, pipeline, time);
thread.start();
}
try {
latch.await();//等待计数器数变为0
} catch (InterruptedException e) {
e.printStackTrace();
}
return latch.getCount();
}
UserThread:
public void run() {
while (true) { //do something
latch.countDown();//计数器减一
}


应该能说明问题了。