gpt4 book ai didi

java - 如何在java中同步异步操作

转载 作者:可可西里 更新时间:2023-11-01 09:13:24 25 4
gpt4 key购买 nike

我目前正在创建一个数据库实用程序类,但我的 mongodb 驱动程序是异步的,我现在的问题是如何同步他?我目前的尝试看起来像这样:

public boolean isBanIDFree(String banid) {
boolean value = false;
Thread thread = Thread.currentThread();
MongoCollection<Document> collection = database.getCollection("Bans");
collection.find(new Document("ID", banid)).first(new SingleResultCallback<Document>() {

@Override
public void onResult(Document result, Throwable t) {
if(result == null) {
value = true;
}
thread.notify();

}
});
try {
thread.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}

return value;
}

但我无法在 onResult 回调中编辑可验证的值,我该如何绕过它。我想返回一个 boolean 值并希望调用线程等到我收到数据库的响应

最佳答案

匿名类中使用的变量必须是有效的最终变量。
这意味着您不能将它们分配给其他东西,但您可以对它们调用 setter。

所以,你可以这样做:

import java.util.concurrent.CompletableFuture;

public class Main {

public static void main(String[] args) {
BooleanWrapper b = new BooleanWrapper();
CompletableFuture.runAsync(() -> b.setValue(true));
// ...
}

private static class BooleanWrapper {
private boolean value;

public boolean getValue() {
return value;
}

public void setValue(boolean value) {
this.value = value;
}
}

}

关于java - 如何在java中同步异步操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50874892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com