如何在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,但是,尽管问题的标题是关于异步方法的,但这不是问题的内容所讨论的。