こんにちは、CompletableFuture とデフォルトForkJoinPool
で、クラシックよりもタスクの実行を最適化できると思いましたが、ExecutorService
何かが欠けています
このコードでは、実行に 1 秒かかります。3 つのワーカー スレッドがあります。
for (int i = 0; i < 3; i++) {
final int counter = i;
listTasks.add(CompletableFuture.supplyAsync(() -> {
Thread.sleep(1000);
System.out.println("Looking up " + counter + " on thread " + Thread.currentThread().getName());
return null;
}));
}
OK、正常に見えます。
しかし、このコードでは 3 秒かかります。
for (int i = 0; i < 9; i++) {
final int counter = i;
listTasks.add(CompletableFuture.supplyAsync(() -> {
Thread.sleep(1000);
System.out.println("Looking up " + counter + " on thread " + Thread.currentThread().getName());
return null;
}));
}
他の待機中のタスクを起動するためにスリープ スレッドが使用されると思っていましたが、これも 1 秒かかるはずです。たとえば、IO WAINTING スレッド状態は、スレッドを他のタスクに再利用できることを意味することを読みました。この動作を でテストできますThread.sleep()
か? テスト方法が間違っているのでしょうか、それとも何かを間違って理解したのでしょうか?