1 回答

TA貢獻(xiàn)1893條經(jīng)驗(yàn) 獲得超10個(gè)贊
Phaser 之所以能夠做到這一點(diǎn),是因?yàn)樗麱orkJoinPool.managedBlock(ManagedBlocker)在阻塞線程時(shí)會(huì)在內(nèi)部調(diào)用。
任何人都可以訪問(wèn) ForkJoinPool 的這個(gè) 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;
}
});
添加回答
舉報(bào)