Java8의 Completable Future async의 이해
2061 단어 jdk8
ExecutorService executorService = Executors.newFixedThreadPool(3);
//executorService.submit(new RuleTestRunnable(1));
List taskList = new ArrayList<>();
for (int i = 0; i < 30; i++) {
taskList.add(i);
}
CompletableFuture a1 = CompletableFuture.supplyAsync(() -> {
logger.info(" 1{}{}"," ");
try {
TimeUnit.MILLISECONDS.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
logger.info(" 1{}{}"," ");
return "1";
},executorService);
CompletableFuture a2 = CompletableFuture.supplyAsync(() -> {
logger.info(" 2{}{}"," ");
try {
TimeUnit.MILLISECONDS.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
logger.info(" 2{}{}"," ");
return "1";
},executorService);
CompletableFuture
executorService 스레드 풀 크기가 2인 경우 다음을 수행합니다.
[pool-4-thread-1] INFO test.rcd.thread.CompletableFutureDemo.lambda$mains$4:127 - 조합 스레드 {} {}
a1.then Combine Async 메서드는 항상 스레드 1 또는 2에 의해 실행됩니다.
executorService 스레드 풀 크기가 3이면 다음과 같은 결과가 발생합니다.
[pool-4-thread-3] INFO test.rcd.thread.CompletableFutureDemo.lambda$mains$4:127 - 조합 스레드 {} {}
a1.then Combine Async 메서드는 항상 스레드 3에 의해 실행됩니다.
a1로 변경thenCombine(), 실행 결과:
a1.then Combine Async 메서드는 항상 스레드 1 또는 2에 의해 실행됩니다.
이를 통해 알 수 있듯이, async 방법은 항상 새로운 라인 실행 방법을 시도하고, async 방법이 없으면 현재 라인에서 라인 실행을 시도합니다.Completable Future는 스레드와 무관한 것 같습니다.
환영하다
교류 방식
QQ:1
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
jdk8의datetime 시간 함수 사용 예시JDK8이 발표되었습니다.datetime 시간 함수 사용 방법의 작은 예시를 썼습니다 실행 결과...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.