在Java中, 如何启动多个线程. 随后使某项任务分步执行.
CountDownLatch 内核心方法:
import java.util.concurrent.CountDownLatch; public class TestJava { public static final CountDownLatch countDownLatch = new CountDownLatch(3); public static void main(String[] args) throws InterruptedException { Thread threadA1 = new Thread(new Runnable() { @Override public void run() { System.out.println("AThreadName: "+Thread.currentThread().getName()+" - "+ "count:"+ countDownLatch.getCount()); countDownLatch.countDown(); } }); Thread threadA2 = new Thread(new Runnable() { @Override public void run() { System.out.println("AThreadName: "+Thread.currentThread().getName()+" - "+ "count:"+ countDownLatch.getCount()); countDownLatch.countDown(); } }); Thread threadA3 = new Thread(new Runnable() { @Override public void run() { System.out.println("AThreadName: "+Thread.currentThread().getName()+" - "+ "count:"+ countDownLatch.getCount()); countDownLatch.countDown(); } }); threadA1.start(); threadA2.start(); threadA3.start(); // 等待3个线程都执行完成 countDownLatch.await(); Thread threadB1 = new Thread(new Runnable() { @Override public void run() { System.out.println("BThreadName: "+Thread.currentThread().getName()+" - "+ "count:"+ countDownLatch.getCount()); } }); Thread threadB2 = new Thread(new Runnable() { @Override public void run() { System.out.println("BThreadName: "+Thread.currentThread().getName()+" - "+ "count:"+ countDownLatch.getCount()); } }); threadB1.start(); threadB2.start(); } }
CountDownLatch其实也是使用AQS对Java中锁的一种实现方式. 有空的话可以详细解读下具体实现.