如何在java中创建一个接受回调函数的方法?

时间:2013-03-04 02:52:27

标签: java asynchronous

我创建了一个分布式锁类,我将其设计为像这样使用:

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

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

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

myLock.lock(myCallbackFunction);

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

有没有办法在java中执行此操作?

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

2 个答案:

答案 0 :(得分:3)

你还不能用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语法应该让它看起来不那么难看。

答案 1 :(得分:0)

为什么不使用已经存在并且正确实现的Semaphore,而不是编写自己的想法然后放弃这个想法,为什么不使用?{/ p>