定期执行线程,直到Future值与条件匹配

时间:2016-07-04 15:56:20

标签: java multithreading web-services http concurrency

我需要停止主线程,直到发生特定情况,然后我可以启动一个不同的线程。

要冻结主线程,我想启动另一个定期检查该特定情况的线程。当达到这种情况时,我们就可以启动第二个线程。

我知道我可以获得"返回值"使用FutureCallable in this fashion的帖子,我也知道如何schedule threads

但我怎么能混合两者?

这就是我想要做的事情:

Thread startResolution = new Thread(() -> target(path + "/" + id + "/schedule").request().get());
Thread stopResolution = new Thread(() -> {
    Response response = target(path + "/" + id + "/schedule/stop-resolution").request().get();
    System.out.println(response.readEntity(String.class));
});

startResolution.start();

// I want to lock the main thread here until this returs a particular state
target(path + "/" + id + "/schedule/resolution-state").request().get(String.class);

stopResolution.start();
startResolution.join();
stopResolution.join();

我怎么能用我提到的工具呢?或者CyclicBarrier可能更适合这种情况?

在这种情况下,HTTP请求混合的事实使我很难找到一种方法。

1 个答案:

答案 0 :(得分:0)

创建并启动检查所需状态的线程,并在状态发生时退出,然后join()。主线程将阻塞连接,直到状态发生。

或者,在stopResolution线程的开头放置代码检查所需的状态并立即启动它;然后该线程将继续处理当前所在的逻辑之前等待所需的状态。在这种情况下,主线程根本不需要改变。