Spec-Zone.ru › OpenJDK 25

Интерфейс ForkJoinPool.ManagedBlocker

Вмещающий класс:
ForkJoinPool
public static interface ForkJoinPool.ManagedBlocker
Интерфейс для расширения управляемого параллелизма задач, выполняющихся в пулах ForkJoinPool.

ManagedBlocker предоставляет два метода. Метод isReleasable() должен возвращать true, если блокировка не требуется. Метод block() при необходимости блокирует текущий поток (возможно, вызывая внутри isReleasable перед фактической блокировкой). Эти действия выполняются любым потоком, вызывающим ForkJoinPool.managedBlock(ManagedBlocker). Необычные методы этого API позволяют работать с синхронизаторами, которые иногда могут блокироваться на длительное время, но обычно этого не делают. Аналогичным образом они обеспечивают более эффективную внутреннюю обработку случаев, когда для поддержания достаточного уровня параллелизма могут потребоваться дополнительные рабочие потоки, хотя обычно они не нужны. Для этого реализации метода isReleasable должны допускать многократный вызов. Ни один из методов не вызывается после того, как предыдущий вызов isReleasable или block возвращает true.

Например, вот ManagedBlocker на основе ReentrantLock:

class ManagedLocker implements ManagedBlocker {
  final ReentrantLock lock;
  boolean hasLock = false;
  ManagedLocker(ReentrantLock lock) { this.lock = lock; }
  public boolean block() {
    if (!hasLock)
      lock.lock();
    return true;
  }
  public boolean isReleasable() {
    return hasLock || (hasLock = lock.tryLock());
  }
}

Вот класс, который может блокироваться в ожидании элемента в заданной очереди:

class QueueTaker<E> implements ManagedBlocker {
  final BlockingQueue<E> queue;
  volatile E item = null;
  QueueTaker(BlockingQueue<E> q) { this.queue = q; }
  public boolean block() throws InterruptedException {
    if (item == null)
      item = queue.take();
    return true;
  }
  public boolean isReleasable() {
    return item != null || (item = queue.poll()) != null;
  }
  public E getItem() { // call after pool.managedBlock completes
    return item;
  }
}
Начиная с версии:
1.7

Краткое описание методов

Модификатор и тип Метод Описание
boolean block()
При необходимости блокирует текущий поток, например в ожидании блокировки или условия.
boolean isReleasable()
Возвращает true, если блокировка не требуется.

Подробное описание методов

block

boolean block() throws InterruptedException
При необходимости блокирует текущий поток, например в ожидании блокировки или условия.
Возвращает:
true, если дополнительная блокировка не требуется (то есть если isReleasable вернул бы true)
Выбрасывает:
InterruptedException — если ожидание было прервано (метод не обязан это делать, но ему это разрешено)

isReleasable

boolean isReleasable()
Возвращает true, если блокировка не требуется.
Возвращает:
true, если блокировка не требуется

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в разделе Документация Java SE, где приведены более подробные описания для разработчиков, обзоры концепций, определения терминов, способы обхода ограничений и работающие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторское право © 1993, 2025, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/util/concurrent/ForkJoinPool.ManagedBlocker.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API