fixedThreadPool
에서 호출 가능 목록을 호출 할 때 문제점이 있습니다. 모든 callable이 실행되는 동안, 그것들 중 일부는 다른 스레드에 동시에 디스패치되어 실제로 한 번 이상 호출됩니다.ExecutorService invokeAll() duplicates 호출중인 호출 가능
try {
ExecutorService es = Executors.newFixedThreadPool(Environment.nThreads);
es.invokeAll(Environment.jobPool);
es.shutdown();
} catch (InterruptedException e) {
e.printStackTrace();
}
ExecutorService에 전달한 컬렉션에 동일한 작업을 여러 번 추가하지 않으시겠습니까? 또한 귀하의 작업 중 실행 중에 예외가 발생하지 않도록 하시겠습니까? –
이 코드 조각에 문제가 있다고 상상하기 어렵습니다. 'Environment.jobPool'은 어떻게 구성되어 있습니까? –
이것은 jobPool이 작성된 코드 부분입니다. public static final ArrayList> jobPool = new ArrayList >(); 여기에 작업이 추가됩니다. Environment.jobPool.add (Executors.callable (new Job (eval, validator))); @Andrei 예외를 throw 할 때도 호출 가능 함수가 두 번 호출되는 것을 볼 수 없습니다. 나는 콘솔에서 모든 예외를 인쇄하는 경향이 있기 때문에 어쨌든 그들은 그렇게하지 않았다고 생각합니다. –
Renaud