首先,我使用了Runnable并构建了一个'while(true)'循环来继续处理我的工作。 现在我在更改使用Callable时发现了一些困难。
package com;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
public class CallableAndFuture {
public static void main(String[] args) throws InterruptedException, ExecutionException {
ChildCallbale childCallbale = new ChildCallbale();
FutureTask<Integer> future = new FutureTask<Integer>(childCallbale);
Thread thread = new Thread(future);
thread.start();
childCallbale.setVar(1);
System.out.println(future.get());
childCallbale.setVar(2);
System.out.println(future.get());
}
}
class ChildCallbale implements Callable<Integer>{
private int var;
public void setVar(int var){
this.var = var;
}
@Override
public Integer call() throws Exception {
Thread.sleep(2000);
return var;
}
}
如你所见,我想要得到不同的结果,因为我兴奋不已。不幸的是,2个结果与1相等。 不仅我想知道如何实现我的要求,我还想知道我的代码变为不正确的原因。提前谢谢。
答案 0 :(得分:1)
未来的get()
方法等待计算完成。所以它等待你的线程休眠两秒钟。然后结果为1.并且结果保持为1,因为线程没有重新运行(并且不应该重新运行!)。
所以第二个setVar
对结果没有影响。