这是在回调之前暂停线程的正确方法吗?

时间:2013-07-12 06:31:51

标签: java android

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

2 个答案:

答案 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,这将阻止您提供所需的信息。所以在一个线程调用中,这将等待一个不同的线程放置。 这两种方法都是阻止的,不需要手动同步。