main线程结束,子线程为什么没有退出

2025-04-14 16:51:05
推荐回答(1个)
回答1:

要实现这个情况,必须知道以下几点
1、java中线程的结束是由run方法运行完成后自动结束的

2、在main线程(主线程)中,需要得到所有线程的引用。
3、知道jdk提供的CountDownLatch的用法
例子如下:
public static void main(String[] args) throws InterruptedException
{
//CountDownLatch作为计数器纪录有几个线程,例如有2个线程

CountDownLatch latch=new CountDownLatch(2);
Worker worker1=new Worker( latch);
Worker worker2=new Worker(latch);
worker1.start();// 启动线程
worker2.start();//
//等待所有工人完成工作
latch.await();
System.out.println("all work done at "+sdf.format(new Date()));
}

class Worker extends Thread
{
private CountDownLatch latch;
public Worker(CountDownLatch latch)

{
this.latch = latch;

}
public void run()

{
xxxxx

//在run方法结束之前,讲线程计数器减一

latch.countDown();
}
}