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

Java 如何在线程运行时修改变量,java,multithreading,variables,callable,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 { publ

起初,我使用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;
    }
}
package-com;
导入java.util.concurrent.Callable;
导入java.util.concurrent.ExecutionException;
导入java.util.concurrent.FutureTask;
公共类CallableAndFuture{
公共静态void main(字符串[]args)引发InterruptedException、ExecutionException{
ChildCallbale ChildCallbale=新的ChildCallbale();
FutureTask future=新的FutureTask(childCallbale);
线程=新线程(未来);
thread.start();
childCallbale.setVar(1);
System.out.println(future.get());
childCallbale.setVar(2);
System.out.println(future.get());
}
}
类ChildCallbale实现了Callable{
私有int-var;
公共无效setVar(int-var){
this.var=var;
}
@凌驾
公共整数调用()引发异常{
《睡眠》(2000年);
收益var;
}
}
正如你所看到的,我想在离开时得到不同的结果。不幸的是,2个结果等于1。 我不仅想知道如何实现我的需求,还想知道我的代码变得不正确的原因。提前感谢。

未来的
get()
方法等待计算完成。因此,它会等待线程休眠的两秒钟。那么结果是1。结果保持为1,因为线程没有重新运行(也不应该重新运行!)


因此,第二个
setVar
对结果没有影响。

简单地说,基本概念都错了。你需要通过研究这些来重新开始,再加上OP在开始线程后设置
var
的方式是没有意义的。他的企图背后隐藏着一个基本的误解。你能给我一些建议来解决我的要求吗?