我实现了一个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;
}
}
}
}
答案 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)
有两种方法可以将返回值恢复回原始线程:
ResultChecker
以查看返回值是否可用。ResultChecker
会在想要返回值时唤醒原始线程。如果你告诉我你喜欢哪种方法,我可以告诉你详情。