阿喀琉斯·卡桑德拉(Achilles Cassandra)-获取条件更新的结果

时间:2018-07-31 05:58:34

标签: cassandra

从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栏位的更新值。

1 个答案:

答案 0 :(得分:2)

这不是Cassandra / Achilles本身的问题,而是异步编程的一般问题-可以在任何时间点调用回调...

对于您的代码,有两件事:

  • 首先,您需要了解是否调用了回调-您可以添加另一个由onSuccessonError设置的布尔变量,以指示已经调用了回调。而且您的代码需要在调用isApplied;
  • 之前检查此变量
  • 第二个-您需要确保所做的更改对代码的其他部分可见。您可以将volatile关键字添加到applied变量的声明中(以及上述变量的声明中)。该关键字将指示数据可以被其他线程更改,而Java将强制始终从内存读取数据。 Following article非常详细地描述了这一点。