[英]How to create a method that accepts a callback function in java?
I created a distributed lock class that I designed to be used like this: 我创建了一个分布式锁类,旨在像这样使用它:
myLock.lock();
doSomething();
myLock.unlock();
In my current implementation, lock() blocks until the lock is acquired. 在我当前的实现中,lock()阻塞直到获得锁为止。 But I am running into some deadlock issues with this implementation.
但是我在实现过程中遇到了一些僵局问题。 So I'd like to rewrite it to be asynchronous, but I have no idea how to do that in java.
因此,我想将其重写为异步的,但是我不知道如何在Java中做到这一点。
Something like this would work I think: 我认为这样的事情会起作用:
myLock.lock(myCallbackFunction);
private void myCallbackFunction(boolean result){
if(result){
doSomething();
mylock.Unlock();
}
}
Is there a way to do this in java? 有没有办法在Java中做到这一点?
EDIT (More detail): The reasons why the synchronous implementation is deadlocking are complicated and not relevant. 编辑(更多详细信息):同步实现死锁的原因很复杂,并且不相关。 The distributed lock is acquiring mutual exclusion of a resource across a network with multiple systems.
分布式锁正在通过具有多个系统的网络获取资源的互斥。 Really the only thing I'm looking for is how to write a method that accepts a callback function.
我真正要寻找的唯一东西就是如何编写一个接受回调函数的方法。
You can't do that in Java yet. 您还不能使用Java做到这一点。 What you can do is define a
LockCallback
interface: 您可以做的是定义一个
LockCallback
接口:
interface LockCallback {
void run(boolean result, MyLock lock);
}
and have MyLock#lock
take a LockCallback
as a parameter. 并让
MyLock#lock
接受LockCallback
作为参数。 Then callers can call it as 然后,呼叫者可以将其称为
myLock.lock(new LockCallback {
public void run(boolean result, MyLock lock) {
// ... do whatever needs to be done ...
lock.unlock();
});
Lambda syntax in Java 8 should make this a little less ugly looking. Java 8中的Lambda语法应该使外观看起来不那么难看。
与其编写自己的想法,然后由于无法实现而放弃想法,为什么不使用Semaphore ,它已经存在并且可以正确实现?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.