今天学习CountDownLatch这个类,作用感觉和join很像,然后就百度了一下,看了他们之间的区别。所以在此记录一下。
首先来看一下join,在当前线程中,如果调用某个thread的join方法,那么当前线程就会被阻塞,直到thread线程执行完毕,当前线程才能继续执行。join的原理是,不断的检查thread是否存活,如果存活,那么让当前线程一直wait,直到thread线程终止,线程的this.notifyAll 就会被调用。
我们来看一下这个应用场景:假设现在公司有三个员工A,B,C,他们要开会。但是A需要等B,C准备好之后再才能开始,B,C需要同时准备。我们先用join模拟上面的场景。
Employee.java:
public class Employee extends Thread{ private String employeeName; private long time; public Employee(String employeeName,long time){ this.employeeName = employeeName; this.time = time; } @Override public void run() { try { System.out.println(employeeName+ "开始准备"); Thread.sleep(time); System.out.println(employeeName+" 准备完成"); } catch (Exception e) { e.printStackTrace(); } } }