ExecutorService executor = Executors.newSingleThreadExecutor();
Future<String> future = executor.submit(() -> {
Thread.sleep(2000); // 2초 기다리기
return "커피 완성!";
});
System.out.println("커피 주문 완료! 기다리는 중...");
String result = future.get(); // ⚠️ 여기가 블로킹. 2초 동안 멈춤.
System.out.println(result); // 출력: 커피 완성!
executor.shutdown();
// 비동기 + 콜백
CompletableFuture<String> cf = CompletableFuture.supplyAsync(() -> {
try {
Thread.sleep(2000); // 2초 대기
} catch (InterruptedException e) {
e.printStackTrace();
}
return "커피 완성!";
});
System.out.println("커피 주문 완료! 기다리는 동안 다른 일 하기...");
cf.thenAccept(result -> {
System.out.println("✅ 받은 메시지: " + result); // 출력: 커피 완성!
});
System.out.println("👉 다른 일 수행 중...");
// cf가 끝날 때까지 메인 쓰레드가 너무 빨리 끝나지 않도록 잠깐 대기
Thread.sleep(3000);
// 출력
// 커피 주문 완료! 기다리는 동안 다른 일 하기...
// 👉 다른 일 수행 중...
// ✅ 받은 메시지: 커피 완성!
https://devfunny.tistory.com/809
https://rudaks.tistory.com/entry/Future%EC%99%80-CompletableFuture#google_vignette