模块  java.base
软件包  java.util.concurrent

Interface ForkJoinPool.ManagedBlocker

  • Enclosing class:
    ForkJoinPool

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

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

      所有方法  实例方法 抽象方法 
      变量和类型 方法 描述
      boolean block()
      可能会阻塞当前线程,例如等待锁定或条件。
      boolean isReleasable()
      如果不需要阻止,则返回 true
    • 方法详细信息

      • block

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

        boolean isReleasable()
        如果不需要阻止,则返回 true
        结果
        true如果不需要阻止