CountDownLatch的使用方法
/**
CountDownLatch类是一个同步计数器(同步辅助类),构造时传入int参数,该参数就是计数器的初始值,每调用一次countDown()方法,计数器减1,
计数器大于0 时,await()方法会阻塞程序继续执行
CountDownLatch如其所写,是一个倒计数的锁存器,当计数减至0时触发特定的事件。利用这种特性,可以让主线程等待子线程的结束
*/
主要方法
public CountDownLatch(int count); // 构造方法参数指定了计数的次数
public void countDown(); // 当前线程调用此方法,则计数减一
public void await() throws InterruptedException // 调用此方法会一直阻塞当前线程,直到计时器的值为0
/**
CountDownLatch类是一个同步计数器(同步辅助类),构造时传入int参数,该参数就是计数器的初始值,每调用一次countDown()方法,计数器减1,
计数器大于0 时,await()方法会阻塞程序继续执行
CountDownLatch如其所写,是一个倒计数的锁存器,当计数减至0时触发特定的事件。利用这种特性,可以让主线程等待子线程的结束
*/
主要方法
public CountDownLatch(int count); // 构造方法参数指定了计数的次数
public void countDown(); // 当前线程调用此方法,则计数减一
public void await() throws InterruptedException // 调用此方法会一直阻塞当前线程,直到计时器的值为0
package CountDownLatchTest;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class CountDownLatchDemoTest {
/**
* @param args
*/
public static void main(String[] args) {
CountDownLatch countDownLatch = new CountDownLatch(5);
System.out.println("start...");
try {
ExecutorService eService = Executors.newFixedThreadPool(3);
for(int i = 0 ; i < 5 ; i ++){
eService.execute(new CountDownLatchDemoTest().new WorkRunnable(countDownLatch));
}
countDownLatch.await(); // 这里开始阻塞,一直等到countDownLatch的值为0
}
catch (InterruptedException e) {
e.printStackTrace();
System.out.println(e.toString());
}
System.out.println("end...");
}
class WorkRunnable implements Runnable{
CountDownLatch countDownLatch = null;
public WorkRunnable(CountDownLatch countDownLatch) {
this.countDownLatch = countDownLatch;
}
@Override
public void run() {
System.out.println("ThreadName = " + Thread.currentThread().getName());
countDownLatch.countDown(); // countDownLatch的值减一
}
}
}