2014-04-07 27 views
0

好吧,所以我創建了一個帶有多個線程的Android程序。現在,當我在第二個線程,並希望在第一「東西」互動,我需要使用下面的代碼:由於最終的操作員而消除代碼冗餘?

new Handler().post(new Runnable() { 
     @Override 
     public void run() { 
      // do stuff 
     } 
}); 

在該塊,我需要從訪問變量「外部」 。例如,我有一個double[10],我聲明並初始設置爲0,然後運行循環更新每個迭代中的每個條目。但是,爲了在上面的塊中引用這個變量,它需要是最終的。目前,我做的是以下幾點:

final double[] b = buckets; 

但肯定必須有一個更有效的方法則不必使用兩倍的內存,只是爲了讓變量決賽?

+1

也許使用syncronized setter? – ifloop

+0

使用'公共同步雙getB(){返回b;}' – VenomVendor

+0

我從來沒有遇到'synchronized'之前。我只是試圖使用它,但是因爲我的'buckets'聲明在一個方法中(它不是一個公共變量),我不太確定如何... –

回答

1

當你寫

final double[] b = buckets; 

你宣稱擁有對現有數據的引用一個新的變量。數據不會被複制。

1

您不使用兩次內存,只使用一個8字節多的指針指向數組。

如果您有double [] buckets = new double [10];你有8個字節的指針和10 * 8個字節的雙打。當你製作final double [] b = bucket時;只能創建一個新的指針,但數組是一樣的。