我需要停止主线程,直到发生特定情况,然后我可以启动一个不同的线程。
要冻结主线程,我想启动另一个定期检查该特定情况的线程。当达到这种情况时,我们就可以启动第二个线程。
我知道我可以获得"返回值"使用Future
和Callable
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请求混合的事实使我很难找到一种方法。
答案 0 :(得分:0)
创建并启动检查所需状态的线程,并在状态发生时退出,然后join()
。主线程将阻塞连接,直到状态发生。
或者,在stopResolution
线程的开头放置代码检查所需的状态并立即启动它;然后该线程将继续处理当前所在的逻辑之前等待所需的状态。在这种情况下,主线程根本不需要改变。