0

我创建了一个分布式锁类,我设计成这样使用:

myLock.lock();
doSomething();
myLock.unlock();

在我当前的实现中,lock() 会阻塞,直到获得锁为止。但是我在这个实现中遇到了一些死锁问题。所以我想将它重写为异步的,但我不知道如何在 java 中做到这一点。

我认为这样的事情会起作用:

myLock.lock(myCallbackFunction);

private void myCallbackFunction(boolean result){
    if(result){
        doSomething();
        mylock.Unlock();
    }
}

有没有办法在java中做到这一点?

编辑(更详细):同步实现死锁的原因很复杂且不相关。分布式锁是通过具有多个系统的网络获取资源的互斥。实际上,我唯一要寻找的是如何编写一个接受回调函数的方法。

4

2 回答 2

3

你还不能在 Java 中做到这一点。你可以做的是定义一个LockCallback接口:

interface LockCallback {
  void run(boolean result, MyLock lock);
}

MyLock#lock以 aLockCallback作为参数。然后调用者可以将其称为

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

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

于 2013-03-04T03:54:05.963 回答
0

与其编写自己的想法然后因为无法使其工作而放弃这个想法,为什么不使用已经存在并正确实现的Semaphore呢?

于 2013-03-04T03:05:17.783 回答