闭锁,CountDownLatch: 是一种同步工具类,可以延迟线程的进度直到其达到终止状态.闭锁是一次性对象,一旦进入终止状态,就不能被重置.
import java.util.concurrent.CountDownLatch;
/**
* User: caiyuan
* Date: 13-1-31
*/
public class Latch {
private CountDownLatch initGate;
private CountDownLatch processGate;
public Latch(CountDownLatch initGate, CountDownLatch processGate) {
this.initGate = initGate;
this.processGate = processGate;
}
public void init() {
System.out.println("init");
initGate.countDown();
}
public void process() throws InterruptedException {
initGate.await();
System.out.println("process");
processGate.countDown();
}
public void finish() throws InterruptedException {
processGate.await();
System.out.println("finish");
}
public static void main(String[] args) throws InterruptedException {
final int count = 5;
final CountDownLatch initGate = new CountDownLatch(count);
final CountDownLatch processGate = new CountDownLatch(count);
for (int i = 0; i < count; i++) {
new Thread(new Runnable() {
@Override
public void run() {
Latch latch = new Latch(initGate, processGate);
try {
latch.init();
latch.process();
latch.finish();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
}
}
结果:
init
init
init
init
init
process
process
process
process
process
finish
finish
finish
finish
finish