如果在主线程中,使用线程,要使主线程在线程后面运行,那么要添加 join
现在我们可以使用countdownlatch 来决定。
那么先模拟一下,countdownlatch 的实现吧
public class CountDown {
private final int total;
private int counter = 0;
public CountDown(int total) {
this.total = total;
}
public void down(){
synchronized (this){
this.counter++;
this.notifyAll();
}
}
public void await() throws InterruptedException {
synchronized (this){
while(counter != total){
this.wait();
}
}
}
}
测试类
public class CustomCountDown {
private final static Random random = new Random(System.currentTimeMillis());
public static void main(String[] args) throws InterruptedException {
final CountDown latch = new CountDown(5);
IntStream.rangeClosed(1,5).forEach(i -> new Thread(() -> {
System.out.println(Thread.currentThread().getName() + " is working ..");
try {
Thread.sleep(random.nextInt(1000));
} catch (InterruptedException e) {
e.printStackTrace();
}
latch.down();
}).start());
latch.await();
System.out.println("这是再countDown 之后执行的");
}
}