如何在线程运行时修改变量

时间:2014-10-27 10:40:31

标签: java multithreading variables callable

首先,我使用了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相等。 不仅我想知道如何实现我的要求,我还想知道我的代码变为不正确的原因。提前谢谢。

1 个答案:

答案 0 :(得分:1)

未来的get()方法等待计算完成。所以它等待你的线程休眠两秒钟。然后结果为1.并且结果保持为1,因为线程没有重新运行(并且不应该重新运行!)。

所以第二个setVar对结果没有影响。