2014-10-27 67 views
0

首先,我使用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

簡而言之,你的基本概念都是錯誤的。你需要重新研究這些。 – 2014-10-27 10:45:32

回答

1

get()未來的方法等待計算完成。所以它等待你的線程睡眠兩秒鐘。然後結果爲1.結果保持爲1,因爲線程不重新運行(不應該重新運行!)。

因此第二個setVar對結果沒有影響。

+0

那麼,加上OP在啓動線程之後設置'var'的方式沒有任何意義。他的企圖背後隱藏着一個基本的誤解。 – 2014-10-27 10:49:07

+0

你能否提供任何建議來解決我的要求? – user1416312 2014-10-28 03:52:24