Java에서 ThreadPoolExecutor
을 사용하는 동안 RejectedExecutionException
을 처리하는 가장 좋은 방법은 무엇입니까?Java에서 ThreadPoolExecutor로 RejectedExecutionException을 처리하는 방법
제출 된 작업을 간과해서는 안되며 반드시 실행해야합니다. 현재로서는 작업을 완료하기위한 까다로운 실시간 요구 사항이 없습니다.
내가 할 수 있다고 생각했던 것들 중 하나는 실행 가능한 대기열에 공간이 있다는 것을 알기 전까지 루프를 기다리고 나서 대기열에 계속 추가하는 것입니다.
사람들이 경험을 공유 할 수 있다면 기쁘게 생각합니다.
만 동시 스레드의 특정 번호 (일반적으로 좋은 일을) 허용하도록 스레드 풀을 제한 한 경우while(executor.getQueue().remainingCapacity <= 0){
// keep looping
Thread.sleep(100);
};
//if the loop exits ,indicates that we have space in the queue hence
//go ahead and add to the queue
executor.execute(new ThreadInstance(params));
두 개 이상의 스레드가이 작업을 시도하면 경쟁 조건이 생성됩니다. 또한 실행 프로그램이 대기열을 지우는 데 오래 걸릴 수도있는 CPU를 구울 것입니다. 예 : 가산기와 집행자를위한 CPU가 하나만있는 경우 이는 심각한 재앙입니다. –
아키텍처에서이 작업을 수행하는 스레드가 하나 뿐이며 CPU 시간을 처리하기 위해 스레드를 수면 상태로 만듭니다. 어떻게 보이나요? – Neeraj
짧은 시간 (심지어 1 - 10ms)조차도 잠자는 것보다 훨씬 좋습니다. 100ms도 좋은 값입니다. 퍼블리싱 스레드가 하나 뿐이라면 괜찮습니다. –