从Achilles执行条件更新/删除时如何获得响应? 我尝试使用自定义的ResultListener,但是它并不总是能正常工作。
public class ResultListener implements LWTResultListener {
private boolean applied;
@Override
public void onSuccess() {
applied = true;
}
@Override
public void onError(LWTResult lwtResult) {
applied = false;
}
public boolean isApplied() {
return applied;
}
}
从调用者类中,我调用isApplied()
,但似乎onSuccess
方法是异步调用的。呼叫者类别看不到applied
栏位的更新值。
答案 0 :(得分:2)
这不是Cassandra / Achilles本身的问题,而是异步编程的一般问题-可以在任何时间点调用回调...
对于您的代码,有两件事:
onSuccess
和onError
设置的布尔变量,以指示已经调用了回调。而且您的代码需要在调用isApplied
; volatile
关键字添加到applied
变量的声明中(以及上述变量的声明中)。该关键字将指示数据可以被其他线程更改,而Java将强制始终从内存读取数据。 Following article非常详细地描述了这一点。