ExecutorService создан в стеке - PullRequest
1 голос
/ 15 октября 2019

Допустим, у меня есть несколько объектов запроса из класса MyRequest. Я хочу, чтобы пакетные запросы вместе. Как следствие, у меня есть реализация Runnable, которая группирует эти запросы в соответствии с некоторыми правилами (запросы передаются в качестве параметра). Давайте назовем это MyBatchedRequestHandler Для одновременного выполнения нескольких пакетов я использую ExecutorService.

Теперь, что произойдет, если я создам такой ExecutorService в теле метода - без внешней ссылки на него? - и выполнить новый Runnable экземпляр для моего запроса. Например:

public void execute(Collection<MyRequests> requests){
      Executors.newSingleThreadExecutor().execute(new MyBatchedRequestHandler(requests));
}

Из-за того, что нет ссылок на экземпляры ExecutorService, я предполагаю, что это может быть сборщик мусора (даже если он еще не завершил запросы). .. Правильно ли мое предположение? Тем не менее, все еще есть ссылка на объекты запроса ... Это мешает сборщику мусора собирать его?

...