주어진 공급자를 호출하여 얻은 값을 사용하여 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을 사용합니다.
으아악
그의 구현을 보고 매번 데몬 프로세스를 생성하세요. 메인 스레드가 휴면 상태여야 하는 이유는 이해하기 쉽습니다.
CompletableFuture.supplyAsync
의 javadoc 보기:그리고
마지막ForkJoinPool.commonPool()
의 javadoc:을 넣으면 기대한 결과를 얻을 수도 있습니다
sleep
改成ForkJoinPool.commonPool().awaitQuiescence(2, TimeUnit.SECONDS);
검색: 데몬 스레드
으아악스레드에 데몬 스레드만 남으면 JVM이 종료됩니다. 그렇지 않으면 사용자 스레드가 있으면 JVM이 종료되지 않습니다.
CompletableFuture.supplyAsync가 데몬 스레드를 시작한다고 추측할 수 있습니다. 실제로 CompletableFuture는 내부적으로 ForkJoinPool을 사용합니다.
그의 구현을 보고 매번 데몬 프로세스를 생성하세요. 메인 스레드가 휴면 상태여야 하는 이유는 이해하기 쉽습니다.