我创建了一个分布式锁类,旨在像这样使用它:

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#lockLockCallback作为参数。然后,呼叫者可以将其称为

myLock.lock(new LockCallback {
  public void run(boolean result, MyLock lock) {
    // ... do whatever needs to be done ...
    lock.unlock();
  });


Java 8中的Lambda语法应使外观看起来不那么难看。

07-25 23:37