[英]How to modify variables while thread is running
最初,我使用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。不僅我想知道如何實現我的要求,還想知道我的代碼變得不正確的原因。 提前致謝。
Future的get()
方法等待計算完成。 因此,它等待線程休眠的兩秒鍾。 然后結果為1。結果保持為1,因為該線程未重新運行(並且不應重新運行!)。
因此,第二個setVar
對結果沒有影響。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.