规定执行的子线程数
只有满足所规定的子线程数都执行完毕后 主线程才能执行
否则主线程会一直等待
原理其实是通过-1操作来实现的 即使没有线程 直接执行-1操作也行
直到将所规定的数减至0即可
public static void main(String[] args) throws Exception {
final CountDownLatch cdl = new CountDownLatch(4);
//这里定义四个子线程数
//每个线程执行完后 执行减一操作 直到减到0 主线程才能执行
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("购买海鲜");
cdl.countDown();
//执行-1操作
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("购买牛羊肉");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
cdl.countDown();
//执行-1操作
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("购买火锅底料和蘸料");
try {
Thread.sleep(800);
} catch (InterruptedException e) {
e.printStackTrace();
}
cdl.countDown();
//执行-1操作
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("购买青菜");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
cdl.countDown();
//执行-1操作
}
}).start();
// 等待食材购买完成
cdl.await();
//如果此时只有三个线程执行了减一操作 那么这个方法就会一直阻塞等待 直到执行了第四个减一操作
System.out.println("开始吃火锅!!");
}