Java 线程返回值检查
我实现了一个Runnable,它检查布尔值是否为真 但是我想把这个值返回给我的类,在那里我开始了线程 我注意到我可以用将来的callable返回一个值,使用它们我可以计算一些东西并立即返回它,但是我不能永久地检查这个值是否为真 我怎样才能做到这一点 谢谢你的帮助Java 线程返回值检查,java,android,Java,Android,我实现了一个Runnable,它检查布尔值是否为真 但是我想把这个值返回给我的类,在那里我开始了线程 我注意到我可以用将来的callable返回一个值,使用它们我可以计算一些东西并立即返回它,但是我不能永久地检查这个值是否为真 我怎样才能做到这一点 谢谢你的帮助 public class ResultChecker implements Runnable{ private DrawView drawView; public ResultChecker(DrawView draw
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;
}
}
}
}
在原始线程中创建处理程序。然后,当您想要返回值时,在该处理程序上发送一条消息;消息可以包含将作为结果的任意对象。处理程序将在原始线程上执行其方法handleMessage,您可以在其中检查发送的消息并对结果作出反应。我不明白您所说的**永久是什么意思** 这个怎么了
public Boolean call() { .. do something..
return bool; }
有两种方法可以将返回值返回到原始线程:
ResultChecker
,查看返回值是否可用ResultChecker
将在原始线程想要返回值时唤醒它如果您告诉我您喜欢哪种方法,我可以告诉您详细信息。如果您想要轮询,请在
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
}
如果要返回多个值,则必须使用队列对其进行扩展。能否尝试重新表述?“永久检查”是什么意思?我的意思是我想检查isNextQuestion(),直到停止线程。对于未来的可调用项,我只需检查一次,就可以得到一个返回值,返回值将为false。但当线程处于活动状态时,它可能会变成现实。。所以我想永久地检查它,并希望在完成线程之前收到正确的结果,因为它只检查一次drawView.isNextQuestion()并返回false。但是这个值可能会改变,它可能会变为真,所以只要我没有完成它,线程就应该检查它。我不确定这是否是一个好主意,但是您也可以尝试在if条件内设置一个字段变量
if(cond){在这里使用setter设置字段变量。}
但我没有原始线程。我有一个活动,在其中我开始这个线程。你的意思是我应该在一个线程中做一个线程?但是我更喜欢第一种方法..我说的“原始线程”是指你想要返回值的线程。我不在乎结果会是什么样。唯一重要的是,该值正在被发送到另一个线程。好的,您能告诉我如何使用方法Nr.1Mh执行此操作吗。。但是“以后再试”应该是什么样子呢?我不能再次调用该方法,我也会遇到同样的问题..我必须检查它,直到我离开此活动..是的,您可以随时调用它,直到结果不为null。如果我对你的计划多了解一点,我会说得更具体一些。您的活动在轮询之间需要做什么?另外,为什么您希望您的活动在单独的线程中而不是在活动中运行ResultChecker?我有一个活动和一个自定义视图。在我的自定义视图中,我可以执行一些拖放操作。如果这个拖放操作完成了,我更愿意在我的活动中检查是否所有的拖放操作都完成了。如果是,我想调用一个Intent并转到下一个活动。因此,用户将执行一系列拖放操作,当这些操作完成后,您希望您的活动检查ResultChecker中的结果?是这样吗?您如何知道用户何时完成拖放操作?用户不需要以某种方式指出这一点吗?