我目前正在创建一个数据库util类,但我的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 Callback中的可验证值,我该如何绕过它。我想返回一个布尔值,并希望调用线程等到我从数据库得到响应
答案 0 :(得分:3)
匿名课程中使用的变量必须是最终的 这意味着你不能将它们分配给其他东西,但你可以在它们上面调用一个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;
}
}
}