有没有实现异步关键字的同步关键字的好方法?显然,关键字synchronized()经常会阻塞当前线程。例如:
public static boolean getLockSync(Runnable r) {
if (isLocked) {
r.run();
return true;
}
synchronized (My.lock) { // this is blocking, could block for more than 1-2 ms
isLocked = true;
r.run();
isLocked = false;
return false;
}
}
我可以从该块返回一个 boolean 值-它是同步的。有没有一种异步的方法?
像这样:
public static void getLockAsync(Runnable r) {
if (isLocked) {
CompletableFuture.runAsync(r);
return;
}
Object.onLockAcquisition(My.lock, () -> { // this is non-blocking
isLocked = true;
r.run();
isLocked = false;
Object.releaseLock(My.lock);
});
}
我组成了Object.onLockAcquisition方法,但是正在寻找类似的东西。
最佳答案
您是否研究了替代方案?根据您要实现的目标,以下一项或多项措施可能有帮助(或没有帮助):