我正在尝试理解Java中的多线程。我编写了以下Java程序来测试线程池。
public class ThreadPoolTest
{
public static void main(String[] args)
{
ExecutorService executorService = Executors.newFixedThreadPool(5);
for( int i = 0; i < 3; i++ )
{
executorService.submit(new Task(i+1));
}
executorService.shutdown();
}
public static class Task implements Runnable
{
private int taskId;
public Task(int id)
{
taskId = id;
}
@Override
public void run() {
System.out.println("Executing task " + taskId + " performed by " + Thread.currentThread().getName() );
try
{
Thread.sleep(3000);
}
catch(InterruptedException interruptEx)
{
System.out.println(Thread.currentThread().getName() + " got interrupted ");
}
System.out.println("Finished executing task " + taskId );
}
}
}
主线程创建执行器,执行器创建5个线程,但我只提交了3个任务。之后,我关闭执行器。运行代码时,主线程先结束而子线程还在运行。这种情况下,JVM会处理子线程吗?
同时,我创建了一个拥有5个线程的线程池,但只提交了3个任务。当主线程退出时,剩余的2个线程会被终止吗?
执行器服务何时被关闭,具体会发生什么?