0

我想暂停并启动线程,直到变量待机。但是 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;
}
4

2 回答 2

2

您可以使用一个对象等待,并在其上调用 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();
}

在这种情况下,无论如何只使用该控制流中正在使用的对象似乎是合理的,但您也可以只添加另一个除了等待之外没有其他目的的对象。

于 2013-07-12T06:47:29.933 回答
0

您可以使用 SynchronousQueue 这将阻塞,直到提供您需要的信息。因此,在一个线程调用中,这将等待另一个线程上的放置。这两种方法都是阻塞的,不需要手动同步。

于 2013-07-12T07:14:11.697 回答