我想暂停并启动线程直到变量待机。 但是wait()和notify()对我来说不起作用。 这是暂停线程的收集方式吗?
private boolean _threadIsWaiting = true;
private Object _specialObjectFromHttp;
public void methodToUse() {
Thread thread = new Thread(new Runnable() {
getParamsFromHttp();
while (_threadIsWaiting) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
convertObject(_specialObjectFromHttp);
)};
}
// Callback method (Thread wait for this.)
private void getParamsFromHttpCallBack(Object result) {
_specialObjectFromHttp = result;
_threadIsWaiting = false;
}
答案 0 :(得分:1)
您可以使用对象等待,并在其上调用notify。我认为这是更好的方法(实际上,使用这样的机制而不是睡觉和布尔检查几乎总是更好)。
private Object _specialObjectFromHttp;
public void methodToUse() {
Thread thread = new Thread(new Runnable() {
getParamsFromHttp();
_specialObjectFromHttp.wait();
)};
}
// Callback method (Thread wait for this.)
private void getParamsFromHttpCallBack(Object result) {
_specialObjectFromHttp = result;
_specialObjectFromHttp.notifyAll();
}
在这种情况下,似乎只使用在该控制流中使用的对象似乎是合理的,但您也可以添加另一个除了等待之外没有其他目的的对象。
答案 1 :(得分:0)
您可以使用SynchronousQueue,这将阻止您提供所需的信息。所以在一个线程调用中,这将等待一个不同的线程放置。 这两种方法都是阻止的,不需要手动同步。