线程返回值永久检查

时间:2012-01-04 23:07:11

标签: java android

我实现了一个Runnable,如果布尔值变为true,它会检查是否正确。

但是我想把这个值返回到我开始执行Thread的类。

我注意到我可以使用Future Callables返回一个值,使用它们我可以只计算一些东西然后立即返回它但是如果值变为真,我就无法永久检查。

我怎样才能实现这个目标?

感谢您的帮助。

public class ResultChecker implements Runnable{
    private DrawView drawView;

    public ResultChecker(DrawView drawView){
        this.drawView = drawView;
    }

    public void run() {
        boolean run = true;
        while(run){
            if(drawView.isNextQuestion()){
                //RETURN VALUE HERE
                run = false;
            }
        }
    }

}

4 个答案:

答案 0 :(得分:1)

如果你想轮询,那么在ResultChecker中创建一个方法,该方法可以被想要返回值的线程调用。

public class ResultChecker implements Runnable{
    private DrawView drawView;
    private volatile Result r;

    public ResultChecker(DrawView drawView){
        this.drawView = drawView;
        this.r = null;
    }

    public Result poll() {
        return r;
    }

    public void run() {
        boolean run = true;
        while(run){
            if(drawView.isNextQuestion()){
                //RETURN VALUE HERE
                r = someObject;
                // once r has been assigned, you cannot touch it again
                // or the object it refers to from this thread because
                // there are no locks
                run = false;
            }
        }
    }

}

投票人会像这样进行民意调查:

r = resultChecker.poll();
if(r != null) {
    // we have result
} else {
    // result is not ready
    // try again later
}

如果要返回多个值,则必须使用队列扩展一点。

答案 1 :(得分:0)

在原始线程中创建一个处理程序。当你想要返回值时,在该处理程序上发送一条消息;消息可以包含任意对象,这将是结果。处理程序将在原始线程上执行它的方法handleMessage,您可以在其中检查已发送的消息并对结果做出反应。

答案 2 :(得分:0)

我无法理解你的意思**永久**

这有什么问题?

public Boolean call() { .. do something..
      return bool;        }

答案 3 :(得分:0)

有两种方法可以将返回值恢复回原始线程:

  1. 原始帖子可以定期轮询ResultChecker以查看返回值是否可用。
  2. 原始线程可以阻止,ResultChecker会在想要返回值时唤醒原始线程。
  3. 如果你告诉我你喜欢哪种方法,我可以告诉你详情。