package thread.latch;
import java.util.concurrent.CountDownLatch;
public class Leader implements Runnable {
private CountDownLatch downLatch;
public Leader(CountDownLatch downLatch) {
this.downLatch = downLatch;
}
public void run() {
System.out.println("leader 正在等所有的worker把活干完。");
try {
this.downLatch.await();
} catch (InterruptedException e) {
}
System.out.println("worker 把活都干完了,leader 开始检查了。");
}
}
package thread.latch;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
public class Worker implements Runnable {
private CountDownLatch downLatch;
private String name;
private String workContent;
public Worker(CountDownLatch downLatch, String name, String workContent) {
this.downLatch = downLatch;
this.name = name;
this.workContent = workContent;
}
public void run() {
this.doSomething();
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException ie) {
}
System.out.println(this.name + " " + workContent + " 做完了");
this.downLatch.countDown();
}
private void doSomething() {
System.out.println(this.name + " 正在 " + workContent);
}
}
package thread.latch;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Test {
/**
* @author jzh add 2011-12-25
* @param args
*/
public static void main(String[] args) {
// 创建一个线程池(创建一个可根据需要创建新线程的线程池)
// Executors 类提供了用于此包中所提供的执行程序服务的工厂方法
ExecutorService pool = Executors.newCachedThreadPool();
// 初始化一个4次的CountDownLatch
CountDownLatch latch = new CountDownLatch(4);
Worker wroker1 = new Worker(latch, "chanpinxue.cn", "扫地");
Worker wroker2 = new Worker(latch, "jiang", "擦桌子");
Worker wroker3 = new Worker(latch, "jzh", "洗碗");
Worker wroker4 = new Worker(latch, "jiangzhihao", "关窗");
Leader leader = new Leader(latch);
pool.execute(wroker1);
pool.execute(wroker2);
pool.execute(wroker3);
pool.execute(wroker4);
pool.execute(leader);
pool.shutdown();
}
}