public static void main(String[] args) throws ExecutionException, InterruptedException {
long start = System.currentTimeMillis();
CompletableFuture<String> future = CompletableFuture.supplyAsync(()->{
System.out.println("first----"+Thread.currentThread().getName());
try {
TimeUnit.SECONDS.sleep(2); // comment the code
} catch (InterruptedException e) {
e.printStackTrace();
}
return "Hello";
}).thenApply(s->{
System.out.println("second----"+Thread.currentThread().getName());
try {
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) {
e.printStackTrace();
}
return s+"World";
}).thenApply(a->{
System.out.println("third----"+Thread.currentThread().getName());
try {
TimeUnit.SECONDS.sleep(4);
} catch (InterruptedException e) {
e.printStackTrace();
}
return a.toUpperCase();
});
System.out.println("time:"+(System.currentTimeMillis()-start)/1000);
System.out.println("result:"+future.get());
}
Прежде чем я не прокомментировал этот код, я запускаю результат следующим образом.
![enter image description here](https://i.stack.imgur.com/FD0St.png)
Видно, что программа выполняется асинхронно, но после комментирования этого кода результат сильно изменился. Программа иногда асинхронная, иногда синхронизируется, и потоки используются каждым модулем применения.
![enter image description here](https://i.stack.imgur.com/Lzv1U.png)
![enter image description here](https://i.stack.imgur.com/c6ERF.png)
Это будет иначе. В чем причина?