在面试时,经常会有面试官问道,一个主线程有多个子线程,如何能使子线程的业务执行完成之后,再执行主线程业务逻辑。对于这个问题,本人能够想到的有五种方法,详细请移步源码
1、使用线程类自带的join方法,将子线程加入到主线程,在子线程执行完之后,在执行主线程逻辑。
例如
public static void joinDemo()
throws InterruptedException
{
System.out.println("=========Test with join=====");
JoinWorker worker1 = new JoinWorker("worker1");
JoinWorker worker2 = new JoinWorker("worker2");
worker1.start();
worker2.start();
worker1.join();
worker2.join();
doSuperWork();
}
2、使用JDK的并发包中的CountDownLatch类, 使用CountDownLatch,每个线程调用其countDown方法使计数器-1,主线程调用await方法阻塞等待,直到CountDownLatch计数器为0时继续执行,例如
首先,定义子线程
static class CountDownLatchWorker extends Thread
{
S
|