我创建了一个分布式锁类,旨在像这样使用它:
myLock.lock();
doSomething();
myLock.unlock();
在我当前的实现中,lock()阻塞直到获得锁为止。但是我在实现过程中遇到了一些僵局问题。所以我想将其重写为异步的,但是我不知道如何在Java中做到这一点。
我认为这样的事情会起作用:
myLock.lock(myCallbackFunction);
private void myCallbackFunction(boolean result){
if(result){
doSomething();
mylock.Unlock();
}
}
有没有办法在Java中做到这一点?
编辑(更多详细信息):同步实现死锁的原因很复杂,并且不相关。分布式锁正在通过具有多个系统的网络获取资源的互斥。我真正要寻找的唯一东西就是如何编写一个接受回调函数的方法。
最佳答案
您还不能在Java中做到这一点。您可以做的是定义一个LockCallback
接口:
interface LockCallback {
void run(boolean result, MyLock lock);
}
并让
MyLock#lock
将LockCallback
作为参数。然后,呼叫者可以将其称为myLock.lock(new LockCallback {
public void run(boolean result, MyLock lock) {
// ... do whatever needs to be done ...
lock.unlock();
});
Java 8中的Lambda语法应使外观看起来不那么难看。