【问题标题】:Achilles Cassandra - Getting result of conditional updateAchilles Cassandra - 获得条件更新的结果
【发布时间】:2018-07-31 15:40:33
【问题描述】:

从 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 字段的更新值。

【问题讨论】:

标签: cassandra


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多