java - java中执行程序服务的范围?

标签 java multithreading threadpoolexecutor

<分区>

最近我一直在使用VM 模板将一些内容写入.vm 文件,然后将vm 文件的内容作为.txt 文件存储在我的计算机中。起初,我一直在为每个文件创建过程创建单独的线程,这并不好,因为在短时间内没有大量线程创建。所以我想使用线程池

考虑以下方法

public void runHugeNoOfShortTimeTasks() {
    ExecutorService service = Executors.newFixedThreadPool(100);
    for(int i=0;i<10000;i++){
        service.submit(runnableWriteToVMAndConvertToTXTFile());   // Each process would take around 1-3 seconds
    }
}

现在考虑完成 for 循环需要 0.5 秒。如果循环结束,进程将退出 runHugeNoOfShortTimeTasks() 方法。但是 ExecutorService 的范围是在那个方法内,那么队列中的线程和正在处理的线程会发生什么?一旦进程退出 runHugeNoOfShortTimeTasks() 方法,Executor 服务是否会被垃圾回收?

另一件事是,一旦队列中的所有线程都完成(如果它不会被垃圾收集),固定线程池 100 会发生什么。它会一直坐在我的内存中等待线程,还是会在所有线程完成后被销毁?

也许我的理解方式完全错误,如果我错了请澄清我..

最佳答案

不,一旦 thread 退出 runHugeNoOfShortTimeTasks(),ExecutorService 将不会被垃圾回收。这是因为 ExecutorService 用来运行任务的线程仍然可以“到达”对象。一旦所有任务完成,线程将退出并死亡,此时 ExecutorService 将有资格进行垃圾收集

关于java - java中执行程序服务的范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30582271/

相关文章:

java - 无法成功将 org.joda.time (2.4) 库添加到 Netbeans

java - 整数最小/最大值特殊溢出行为

java - 当作业到达 threadPoolExecution 时调用所有线程

android - 在 threadpoolexecutor 中停止运行任务的最佳方法是什么?

java - 扩展外部类在java中如何工作

java - 为什么 Comparator<Integer[]> 抛出异常?

c - 有没有办法在线程创建/销毁时调用库线程局部初始化/清理?

java - 如何在 Java 中实现多线程 MergeSort

java - 如何在 web 服务中运行线程