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

如何在java中创建一个接受回调函数的方法?,java,asynchronous,Java,Asynchronous,我创建了一个分布式锁类,我设计它的用途如下: myLock.lock(); doSomething(); myLock.unlock(); 在我当前的实现中,lock()会一直阻塞,直到获得锁为止。但是我在这个实现中遇到了一些死锁问题。所以我想将它重写为异步的,但我不知道如何在java中做到这一点 我认为这样做会奏效: myLock.lock(myCallbackFunction); private void myCallbackFunction(boolean result){ i

我创建了一个分布式锁类,我设计它的用途如下:

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();
  });

Java8中的Lambda语法应该会让它看起来不那么难看。

在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();
  });

Java8中的Lambda语法应该会让它看起来不那么难看。

“所以我想将它重写为异步的”——锁的定义是同步的。你说“我想把它重写成异步的”是什么意思?你看到了吗?你应该提供关于这些方法的更多细节。什么时候会出现死锁?你需要启动一个线程,或者使用一个线程池工具。“所以我想把它重写成异步的”——锁的定义是同步的。你说“我想把它重写成异步的”是什么意思?你看到了吗?你应该提供关于这些方法的更多细节。什么时候会出现死锁?您需要启动一个线程,或者使用一个线程池功能。仍然不会使任何东西异步。@HotLicks:True,但是问题的标题是关于异步方法的,而这不是问题的内容所讨论的。仍然不会使任何东西异步。@HotLicks:True,但是,尽管问题的标题是关于异步方法的,但这不是问题的内容所讨论的。