다음 예제 코드에서는 완료 가능한 미래 집합의 완료 작업으로 100 밀리 동안 잠을자는 biconsumer
을 삽입하고 있습니다. 나는 executorService
을 사용하여 whenCompleteAsync
메서드를 사용했습니다. executorService
만 6 출력이 인쇄되는 심지어 내가 100 개 선물을 완료거야하지만, 코어 풀 크기 5, 최대 크기 (5) 내가 코드를 실행 1.CompletableFuture의 whenCompleteAsync 호출에서 Throw 된 RejectedExecutionException을 어떻게 캡처 할 수 있습니까?
public class CompleteTest {
public static void main(String[] args) {
ExecutorService executorService = new ThreadPoolExecutor(5, 5, 10,
TimeUnit.SECONDS, new ArrayBlockingQueue<>(1));
ArrayList<CompletableFuture<String>> list = new ArrayList<>();
for (int i = 0; i <100; i++) {
CompletableFuture<String> stringCompletableFuture = new CompletableFuture<>();
stringCompletableFuture.whenCompleteAsync((e, a) -> {
System.out.println("Complete " + e);
try {
Thread.sleep(100);
} catch (InterruptedException e1) {e1.printStackTrace();}
}, executorService);
list.add(stringCompletableFuture);
}
for (int i = 0; i < list.size(); i++) {
list.get(i).complete(i + "");
}
}
}
의 큐의 길이가 ThreadPoolExecutor
입니다. 이것은 5 개의 코어 스레드와 1 개의 대기열 스레드입니다. 나머지는 어떻게됩니까? 큐가 이미 꽉 차서 다른 실행 파일을 실행 프로그램에 제출할 수 없으면 예외가 없어야합니다.
출력
Complete 0
Complete 1
Complete 2
Complete 3
Complete 4
Complete 5