1

가비지 컬렉션에 사용할 수있는 ExecutorService를 전달하고, 인스턴스에 전달 할 때 나는 CallableWorkerThread은 호출 가능 내가 8 스레드 풀을

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(); 

구현 약 클래스의 100 개 인스턴스를 제공하고있다 집행자는 가비지 수집 대상이됩니까? f.get()이 실행될 때 가비지 콜렉션을받을 수 있거나 executor.shutdown()이 호출 될 때까지 new Worker(hugeList)은 모두 메모리에 남아있게됩니다.

모든 new Worker()은 실제로 크기가 커서 각각의 스레드가 실행 된 후 가비지 수집됩니다. 그러나 나는 그들이 그 자격을 갖춘시기가 언제인지 확신 할 수 없다.

답변

1

호출 가능 함수의 결과가 호출 가능 자체를 참조하지 않는 한, 태스크가 실행 되 자마자 아무 것도 참조하지 않으므로 GC에 적합하게됩니다.

풀은 작업이 실행되기를 기다리는 대기열과 대기열에서 대기열을 가져 와서 실행하는 일련의 스레드입니다. 일단 실행되면 풀은 더 이상 작업을 신경 쓰지 않으며 아무 곳에 나 두지 않습니다.

+0

많은 의미가 있습니다. 고마워. –