究竟什么时候 Callable 传递给 ExecutorService 可用于垃圾收集

When exactly is a Callable passed to an ExecutorService available for garbage collection

我有一个 8 线程池,我给它大约 100 个 class 实现 Callable 的实例,即 WorkerThread

for (List<String> s : listOfLists) {
    Future<?> future = executor.submit(new Worker(hugeList));   
}

for (Future<?> f : futures) {
        try {
            String result = (String) f.get();
        } catch (InterruptedException e) {
            logger.error("Interrupted", e);
        } catch (ExecutionException e) {
            logger.error("Execution exception", e);
        }
    }


            executor.shutdown();

传递给执行程序的实例何时有资格进行垃圾回收?一旦 f.get() 被执行,它们是否符合垃圾收集的条件,或者所有 new Worker(hugeList) 将保留在内存中,直到 executor.shutdown() 被调用。

每个 new Worker() 都非常大,我希望它们在各自的线程执行后被垃圾回收。但我不确定他们什么时候有资格这样做。

除非 callable 的结果引用了 callable 本身,一旦任务被执行,它就不会被任何东西引用,因此符合 GC 的条件。

池是一个队列,任务在其中等待执行,一组线程将任务从队列中取出并执行。一旦执行,池就不再关心任务,也不会把它们保存在任何地方。