CountDownLatch 发令枪
import java.util.ArrayList; import java.util.List; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; public class CountDownLatch_Test { public static void main(String[] args) { final CountDownLatch_Container t = new CountDownLatch_Container(); //给一个初始值为3 final CountDownLatch latch = new CountDownLatch(3); new Thread(new Runnable() { @Override public void run() { if (t.size() != 3) { try { //latch的数量没有减到0之前,等待,阻塞 latch.await(); } catch (InterruptedException e) { e.printStackTrace(); } } //latch数量为0时,发令,执行下面的代码 System.out.println("size = 3"); } }).start(); new Thread(new Runnable() { @Override public void run() { for (int i = 0; i < 10; i++) { System.out.println("add Object to Container " + i); t.add(new Object()); //每执行一次减1 latch.countDown(); try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } } } }).start(); } } class CountDownLatch_Container { List<Object> container = new ArrayList<>(); public void add(Object o) { this.container.add(o); } public int size() { return this.container.size(); } }
执行结果: