JDK8에서 CompletableFuture를 사용할 때 발생하는 문제
伊谢尔伦
伊谢尔伦 2017-06-15 09:22:15
0
2
933
으아악

결과는 다음과 같습니다.

으아악

위 코드의 마지막 줄을 주석 처리하면 기대한 결과를 얻을 수 없습니다.

왜 명시적으로 프로그램을 10초 동안 절전 모드로 전환해야 합니까?

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

모든 응답(2)
某草草

CompletableFuture.supplyAsync의 javadoc 보기:

주어진 공급자를 호출하여 얻은 값을 사용하여 ForkJoinPool.commonPool()에서 실행 중인 작업에 의해 비동기적으로 완료되는 새로운 CompletableFuture를 반환합니다.

그리고 ForkJoinPool.commonPool()의 javadoc:

공통 풀 인스턴스를 반환합니다. 이 풀은 종료 또는 shutdownNow 시도에 영향을 받지 않습니다. 그러나 이 풀과 진행 중인 모든 처리는 프로그램 종료 전에 자동으로 종료됩니다.System.exit. Any program that relies on asynchronous task processing to complete before program termination should invoke commonPool().awaitQuiescence

마지막

을 넣으면 기대한 결과를 얻을 수도 있습니다sleep改成ForkJoinPool.commonPool().awaitQuiescence(2, TimeUnit.SECONDS);

某草草

검색: 데몬 스레드
스레드에 데몬 스레드만 남으면 JVM이 종료됩니다. 그렇지 않으면 사용자 스레드가 있으면 JVM이 종료되지 않습니다.
CompletableFuture.supplyAsync가 데몬 스레드를 시작한다고 추측할 수 있습니다. 실제로 CompletableFuture는 내부적으로 ForkJoinPool을 사용합니다.

으아악

그의 구현을 보고 매번 데몬 프로세스를 생성하세요. 메인 스레드가 휴면 상태여야 하는 이유는 이해하기 쉽습니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿