Spec-Zone .ru
спецификации, руководства, описания, API
|
public static interface ForkJoinPool.ManagedBlocker
ForkJoinPool
s. A ManagedBlocker
обеспечивает два метода. Метод isReleasable
должен возвратиться true
если блокирование не необходимо. Метод block
блокирует текущий поток в случае необходимости (возможно, внутренне вызов isReleasable
перед фактическим блокированием). Эти действия выполняются любым вызовом потока ForkJoinPool.managedBlock(java.util.concurrent.ForkJoinPool.ManagedBlocker)
. Необычные методы в этом API размещают синхронизаторы, которые, но обычно не делают, может блокировать в течение многих длительных периодов. Точно так же они позволяют более эффективную внутреннюю обработку случаев, в которых дополнительные рабочие могут быть, но обычно не, должен был гарантировать достаточный параллелизм. К этому концу, реализациям метода isReleasable
должно поддаваться повторному вызову.
Например, вот 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;
}
}
Модификатор и Тип | Метод и Описание |
---|---|
boolean |
block()
Возможно блокирует текущий поток, например ожидающий блокировки или условия.
|
boolean |
isReleasable()
Возвраты
true если блокирование является ненужным. |
boolean block() throws InterruptedException
true
если бы никакое дополнительное блокирование не необходимо (то есть, если isReleasable возвратил бы true),InterruptedException
- если прервано, ожидая (метод не обязан делать так, но позволяется),boolean isReleasable()
true
если блокирование является ненужным.
Для дальнейшей ссылки API и документации разработчика, см.
Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.