【问题标题】:Want to run the method again if its taking time first time. How to achieve it? [duplicate]如果第一次需要时间,想再次运行该方法。如何实现? [复制]
【发布时间】:2018-01-17 21:28:45
【问题描述】:

我有一个方法(比如 execute()),如果返回响应需要超过 10 秒(每说)我需要重新执行它。

请帮助我如何实现这一目标?

谢谢

【问题讨论】:

  • Google:断路、重试、超时和指数退避。这些术语中的每一个都将帮助您更好地理解与您的用例相关的内容。
  • 如果你有未来,你可以调用 get 超时。
  • @assylias 是否与执行器服务有关。请指点我参考或示例
  • 看这个帖子stackoverflow.com/a/2275596/6138873,这几乎就是你要找的东西

标签: java multithreading threadpool


【解决方案1】:

类似

Object response;
start = System.currentTimeMillis();
response = execute();
if (System.currentTimeMillis() - start > 10000) {
  response = execute();
}

?或

Object get() {
  ExecutorService executor = Executors.newSingleThreadExecutor();
  Future<Object> response = executor.submit(() -> {
    return execute();
  });
  executor.shutdown();
  executor.awaitTermination(10, TimeUnit.SECONDS);
  if (executor.isTerminated()) {
    return response.get();
  }
  executor.shutdownNow();
  return get();
}

【讨论】:

  • 我怀疑这是否能解决问题,如果第 3 行花费的时间超过预期,我必须终止它
猜你喜欢
  • 2021-08-24
  • 2021-12-02
  • 2013-08-21
  • 2021-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多