org.elasticsearch.util.concurrent.jsr166y
Interface ForkJoinPool.ManagedBlocker

Enclosing class:
ForkJoinPool

public static interface ForkJoinPool.ManagedBlocker

Interface for extending managed parallelism for tasks running in ForkJoinPools.

A ManagedBlocker provides two methods. Method isReleasable must return true if blocking is not necessary. Method block blocks the current thread if necessary (perhaps internally invoking isReleasable before actually blocking).

For example, here is a ManagedBlocker based on a 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());
   }
 }


Method Summary
 boolean block()
          Possibly blocks the current thread, for example waiting for a lock or condition.
 boolean isReleasable()
          Returns true if blocking is unnecessary.
 

Method Detail

block

boolean block()
              throws java.lang.InterruptedException
Possibly blocks the current thread, for example waiting for a lock or condition.

Returns:
true if no additional blocking is necessary (i.e., if isReleasable would return true)
Throws:
java.lang.InterruptedException - if interrupted while waiting (the method is not required to do so, but is allowed to)

isReleasable

boolean isReleasable()
Returns true if blocking is unnecessary.