我创建了一个分布式锁类,我将其设计为像这样使用:
myLock.lock();
doSomething();
myLock.unlock();
在我当前的实现中,lock()会阻塞,直到获取锁定为止。但是我遇到了这个实现的一些死锁问题。所以我想把它重写为异步,但我不知道如何在java中做到这一点。
我认为这样的事情会起作用:
myLock.lock(myCallbackFunction);
private void myCallbackFunction(boolean result){
if(result){
doSomething();
mylock.Unlock();
}
}
有没有办法在java中执行此操作?
EDIT(更多细节):同步实现死锁的原因很复杂且不相关。分布式锁定通过多个系统获取跨网络的资源的互斥。真的,我唯一想要的是如何编写一个接受回调函数的方法。
答案 0 :(得分:3)
你还不能用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();
});
Java 8中的Lambda语法应该让它看起来不那么难看。
答案 1 :(得分:0)
为什么不使用已经存在并且正确实现的Semaphore,而不是编写自己的想法然后放弃这个想法,为什么不使用?{/ p>