掛多把鎖,當(dāng)所有的鎖都釋放掉后 才執(zhí)行
- 可以和鎖混合使用,或替代鎖的功能。
- 在門閂未完全開放之前等待。當(dāng)門閂完全開放后執(zhí)行。
- 避免鎖的效率低下問題。
一般用于有前后順序的地方 ,比如spring 容器初始化,要先初始化什么 再初始化什么,然后在做什么事情; 每次做完一件事后 就減(釋放)去一把鎖
public class TestSync {
//門閂 相當(dāng)于 掛5把鎖 ,當(dāng)這5把鎖一次都 釋放時 才執(zhí)行
CountDownLatch latch = new CountDownLatch(5);
void m1() {
try {
latch.await(); //等待 門閂上的 鎖 全部釋放
} catch (InterruptedException e) {
e.printStackTrace();
}
}
void m2() {
for (int i = 0; i < 10; i++) { //循環(huán)釋放鎖
if(latch.getCount()!=0) { // 不等于0 也就是說 還有鎖
latch.countDown();//釋放一把鎖
System.out.println("m1(執(zhí)行了)");
}
}
}
public static void main(String[] args) {
TestSync t = new TestSync();
new Thread(new Runnable() {
@Override
public void run() {
t.m1(); //第一個線程 先執(zhí)行m1() 需要等待 5把鎖開放
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
t.m2();
}
}).start();
}
}