В Java 25 ForkJoinWorkerThread поможет общему пулу при вызове CompletableFuture.join(), даже если поток находится из друJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 В Java 25 ForkJoinWorkerThread поможет общему пулу при вызове CompletableFuture.join(), даже если поток находится из дру

Сообщение Anonymous »

Я обнаружил, что поведение CompletableFuture и ForkJoinPool отличается от Java 25.
Вот тест:

Код: Выделить всё

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();
}
Я не уверен, что это специально. Разница заключается в ForkJoinPool#helpAsyncBlocker(Executor, ForkJoinPool.ManagedBlocker).

Подробнее здесь: https://stackoverflow.com/questions/797 ... mpletablef
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»