Java 线程池 : What happens to idle threads

标签 java multithreading threadpool threadpoolexecutor

我想了解 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 );
        }
    }
}

主线程创建了 executor,它创建了 5 个线程,而我只提交了 3 个任务。之后,我将关闭执行者。当我运行代码时,主线程在子线程之前完成。在这种情况下,JVM 是否负责处理子线程? 我还创建了一个有 5 个线程的线程池,但只提交了 3 个任务。主线程退出时,剩下的2个线程会不会被终止?

执行程序服务关闭时实际发生了什么?

最佳答案

来自 ExecutorService#shutdown() 的文档:

Initiates an orderly shutdown in which previously submitted tasks are executed, but no new tasks will be accepted.

这意味着您提交给执行器的所有作业都将按自己的时间完成,而不会中断或“催促”它们,并且执行器将正确地完成工作线程,但服务既不会接受新作业,也不会它立即终止。

比较 ExecutorService#shutdownNow(),它将尝试尽快终止。

关于Java 线程池 : What happens to idle threads,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27482337/

相关文章:

android - SYSTEM_UI_FLAG_LOW_PROFILE 无法解析或不是 google threadsample 的字段

.Net 如何创建跨进程的所有 AppDomain 共享的自定义 ThreadPool?

java - 多列的 Hibernate 搜索查询

java - 如何在 Android Studio 中构建 AndEngine?

c++ - 对于 C++ MacOSX 应用程序,要使用什么线程库?

c++ - 使用 C++ 11lambda boost 线程

java - 从字符串中获取指定单词 php codeigniter

java - 从文本文件解析 JSON 数据

java - 了解 future /线程

exception - 使用线程池时出现 Hadoop 'Filesystem closed' 异常