2013-01-11 72 views
1

我偶然發現了一個對我來說不清楚的問題。帶線程的異步函數

A.使用Java 1.4,包裹下面的函數在一個線程,以便它可以異步調用,並提供一種方式,在以後的時間被檢索的返回值:

B.會如何寫有兩個公共方法void synchronized calculate(int i)int getValue()類:同樣可以在Java 5中

int someMethod(int i) { return i++; } 

我認爲什麼是解決方案之一來完成。 calculate啓動線程並設置一個私有變量。

在java 1.5中我可以使用AtomincInteger。這是一個答案嗎?

回答

1

在Java 1.5中,我敢肯定你會使用Future來返回結果。我不確定1.4的等價物,但它看起來像this question涵蓋了同樣的理由。

0

Mybe您可以使用雙重檢查中1.5 or later鎖定:

private volatile int privateValue = 0; 

public void calculate(int i) { 
    int result = getValue(i); 
    if (privateValue != result) { 
     synchronized (this) { 
      if (privateValue != result) { 
       privateValue = result; 
      } 
     } 
    } 

} 

public int getValue(){ 
    return privateValue; 
} 

確保您privateValue必須聲明爲volatile

有關更多信息double check locking

The "Double-Checked Locking is Broken" Declaration

0

calculate()方法將結果放在BlockingQueue queuegetValue()方法調用queue.take(),從而等待結果尚未計算。

注意如果可以多次調用getValue()方法,則需要額外的編程工作。