1 回答

TA貢獻(xiàn)1893條經(jīng)驗 獲得超10個贊
Phaser 之所以能夠做到這一點,是因為它ForkJoinPool.managedBlock(ManagedBlocker)在阻塞線程時會在內(nèi)部調(diào)用。
任何人都可以訪問 ForkJoinPool 的這個 API,因此您可以輕松地增強(qiáng)您的CyclicBarrier版本以使用它,并消除線程饑餓。例如,帶有以下氛圍的東西:
ForkJoinPool.managedBlock(new ManagedBlocker() {
boolean isReleasable = false;
@Override
public boolean block() throws InterruptedException {
try {
cyclicBarrier.await();
} catch (BrokenBarrierException aE) {
throw new IllegalStateException(aE);
}
return isReleasable = true;
}
@Override
public boolean isReleasable() {
return isReleasable;
}
});
添加回答
舉報