java - 线程返回值永久检查

标签 java android

我实现了一个 Runnable,如果 boolean 值变为 true,它会检查正确性。

但我想将此值返回到我启动线程的类。

我注意到我可以使用 Future Callables 返回一个值,使用它们我可以计算一些东西并立即返回它,但我无法永久检查该值是否变为 true。

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

感谢您的帮助。

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;
            }
        }
    }

}

最佳答案

如果您想要轮询,请在 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
}

如果您想返回多个值,则必须使用队列对其进行扩展。

关于java - 线程返回值永久检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8735412/

相关文章:

java - 使用 Retrofit2 上传二进制文件大多数时候会因 ECONNRESET(连接被对等方重置)而失败

Java 抽象类——找不到符号——方法错误

Java 乘法 .*

android - 我可以使用 Xamarin 或任何其他替代框架在 Android 上运行自托管(基于 Owin)的 Web Api

java - 找到用死 Groovy 代码填充 PermGen 的代码

java - 无法从 Main 内部的嵌套循环更新 Main 中的数组。我该如何分配它的值?

android - 以编程方式获取主题属性

java - Libgdx,按钮 onclick 事件崩溃

使用适用于 Unity3D 的 Google Fitness API 的 Android 插件

android - MediaPlayer 在后台播放音频并播放下一首