执行程序服务在超出范围时是否会被垃圾回收?
我问这个问题是因为我正在创建很多执行器服务,虽然我可能已经在某个地方有一个需要调查的内存泄漏,但我认为最近对以下代码的更改实际上使它变得更糟,因此我试图确认发生了什么:
@FunctionalInterface
public interface BaseConsumer extends Consumer<Path> {
@Override
default void accept(final Path path) {
String name = path.getFileName().toString();
ExecutorService service = Executors.newSingleThreadExecutor(runnable -> {
Thread thread = new Thread(runnable, "documentId=" + name);
thread.setDaemon(true);
return thread;
});
Future<?> future = service.submit(() -> {
baseAccept(path);
return null;
});
try {
future.get();
} catch (InterruptedException ex) {
Thread.currentThread().interrupt();
} catch (ExecutionException ex) {
throw new RuntimeException(ex);
}
}
void baseAccept(final Path path) throws Exception;
}
然后,在另一个线程池上调用它(通常)N = 2个线程,我不确定这是否相关。Consumer<Path>
问题是:一旦完成,是否超出了范围并收集了垃圾?ExecutorService service
BaseConsumer#accept