作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了一个分布式锁类,我设计它的使用方式如下:
myLock.lock();
doSomething();
myLock.unlock();
在我当前的实现中,lock() 会阻塞,直到获取锁为止。但我在这个实现中遇到了一些僵局问题。所以我想将其重写为异步的,但我不知道如何在java中做到这一点。
我认为这样的事情会起作用:
myLock.lock(myCallbackFunction);
private void myCallbackFunction(boolean result){
if(result){
doSomething();
mylock.Unlock();
}
}
有没有办法在java中做到这一点?
编辑(更多详细信息):同步实现死锁的原因很复杂且不相关。分布式锁正在通过多个系统的网络获取资源的互斥。实际上,我唯一要寻找的是如何编写一个接受回调函数的方法。
最佳答案
您还不能在 Java 中做到这一点。您可以做的是定义一个LockCallback
接口(interface):
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 语法应该会让这看起来不那么难看。
关于java - 如何在java中创建一个接受回调函数的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15193856/
我是一名优秀的程序员,十分优秀!