我有一個數據變量monthArray
,它由多個使用者讀取並定期由單個定期更新程序線程更新。全部是異步的。同步的代碼塊只對塊進行分配或整個塊體?
我已經考慮了這兩個選項來安全地執行更新。
ArrayList<String> tempArray = ModelJob.getDistinctMonths(user, true);
synchronized (monthArray) {
monthArray = tempArray;
}
或
synchronized (monthArray) {
monthArray = ModelJob.getDistinctMonths(user, true);
}
後面的第一個是該ModelJob.getDistinctMonths(user, true);
呼叫非常耗時,而且我不想持有synchrinzation阻止更長那麼它,只爲快速的想法使用更新的數組重新分配舊數組。但似乎是一個混淆,我只想做,如果完全nessecary。任何人都可以告訴我jvm如何處理這種同步和天氣或不做前者會給我什麼增加性能?基本上我問如果jvm會阻塞整個靜態ModelJob調用,或者它只能阻止重新分配並且安全,如果是的話,如果它足夠聰明的話。
一個空塊'synchronized(monthArray){}'仍然會等待獲得一個鎖。該塊的內容並不重要。 – 2012-07-17 14:11:50