Module  java.base
软件包  java.util.concurrent

Interface ForkJoinPool.ManagedBlocker

  • Enclosing class:
    ForkJoinPool


    public static interface ForkJoinPool.ManagedBlocker
    用于扩展管理并行性的接口,用于在ForkJoinPool运行的任务。

    A ManagedBlocker提供了两种方法。 如果不需要阻塞,方法isReleasable()必须返回true 方法block()在必要时阻止当前线程(可能在实际阻止之前内部调用isReleasable )。 这些操作通过调用ForkJoinPool.managedBlock(ManagedBlocker)的任何线程执行。 此API中的不寻常方法适用于可能但通常不会长时间阻塞的同步器。 同样,它们允许更有效的内部处理案件,其中需要额外的工作人员,但通常不需要确保充分的并行性。 为此,方法isReleasable实现必须适于重复调用。

    例如,这里是一个基于ReentrantLock的ManagedBlocker:

       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; } } 
    • 方法摘要

      所有方法  接口方法  抽象方法 
      Modifier and Type 方法 描述
      boolean block​()
      可能阻止当前线程,例如等待锁或条件。
      boolean isReleasable​()
      如果不需要阻塞,则返回 true
    • 方法详细信息

      • block

        boolean block​()
               throws InterruptedException
        可能阻止当前线程,例如等待锁或条件。
        结果
        true如果不需要额外的阻塞(即,如果isReleasable将返回true)
        异常
        InterruptedException - 如果在等待时中断(该方法不需要这样做,但允许)
      • isReleasable

        boolean isReleasable​()
        如果不需要阻塞,则返回 true
        结果
        true如果阻塞是不必要的