1.使用 CountDownLatch 1 static CountDownLatch latch = new CountDownLatch(1);2 3 public static void main(String[] args) throws InterruptedException {4 Thread thread1 = new Thread(() -> {5 System.out.println("A");6 latch.countDown();7 });8 thread1.start();9 latch.await();10 11 latch = new CountDownLatch(1);12 Thread thread2 = new Thread(() -> {13 System.out.println("B");14 latch.countDown();15 });11 collapsed lines16 thread2.start();17 latch.await();18 19 latch = new CountDownLatch(1);20 Thread thread3 = new Thread(() -> {21 System.out.println("C");22 latch.countDown();23 });24 thread3.start();25 latch.await();26} 2.使用CyclicBarrier 1static CyclicBarrier barrier = new CyclicBarrier(1);2 3public static void main(String[] args) throws BrokenBarrierException, InterruptedException {4 Thread thread1 = new Thread(() -> {5 System.out.println("A");6 });7 thread1.start();8 barrier.await();9 10 barrier.reset();11 Thread thread2 = new Thread(() -> {12 System.out.println("B");13 });14 thread2.start();15 barrier.await();8 collapsed lines16 17 barrier.reset();18 Thread thread3 = new Thread(() -> {19 System.out.println("C");20 });21 thread3.start();22 barrier.await();23} 3.使用Semphore 1static Semaphore semaphore = new Semaphore(1);2 3public static void main(String[] args) throws BrokenBarrierException, InterruptedException {4 semaphore.acquire();5 Thread thread1 = new Thread(() -> {6 System.out.println("A");7 semaphore.release();8 });9 thread1.start();10 11 semaphore.acquire();12 Thread thread2 = new Thread(() -> {13 System.out.println("B");14 semaphore.release();15 });9 collapsed lines16 thread2.start();17 18 semaphore.acquire();19 Thread thread3 = new Thread(() -> {20 System.out.println("C");21 semaphore.release();22 });23 thread3.start();24} 4.使用线程池 1public static void main(String[] args) {2 ExecutorService executorService = Executors.newSingleThreadExecutor();3 4 for (int i = 0; i < 3; i++) {5 int finalI = i;6 executorService.submit(() -> {7 System.out.println((char)('A' + finalI));8 });9 }10}