Я пытаюсь понять многопоточность в Java. Я написал следующую 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 потока прекращены при выходе основного потока?
Что происходит, когда служба-исполнитель выключается?