In Java 25 unterstützt ForkJoinWorkerThread den gemeinsamen Pool beim Aufruf von CompletableFuture.join(), selbst wenn dJava

Java-Forum
Anonymous
 In Java 25 unterstützt ForkJoinWorkerThread den gemeinsamen Pool beim Aufruf von CompletableFuture.join(), selbst wenn d

Post by Anonymous »

Ich habe festgestellt, dass sich das Verhalten von CompletableFuture und ForkJoinPool seit Java 25 unterscheidet.
Hier ist der Test:

Code: Select all

try (ForkJoinPool pool = new ForkJoinPool(2)) { // A new pool
ForkJoinTask adapt = ForkJoinTask.adapt(() -> {
Thread thread = Thread.currentThread();
assertTrue(thread instanceof ForkJoinWorkerThread);
// submit to common pool
List workers = range(0, 100).mapToObj(i -> CompletableFuture.supplyAsync(() -> {
LockSupport.parkNanos(1_000_000L);
return Thread.currentThread();
})).toList().stream()
.map(CompletableFuture::join) // join in current ForkJoinWorkerThread
.toList();
if (Runtime.version().feature() < 25) {
// before 25, ForkJoinWorkerThread won't help for a different ForkJoinPool
assertThat(workers).doesNotContain(thread);
} else {
// after 25, the ForkJoinWorkerThread will help even from a different ForkJoinPool
assertThat(workers).contains(thread);
}
});
pool.execute(adapt);
adapt.join();
}
Ich bin mir nicht sicher, ob es Absicht ist. Der Unterschied ergibt sich aus ForkJoinPool#helpAsyncBlocker(Executor, ForkJoinPool.ManagedBlocker).

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post