Java併發程式設計實戰--事實不可變物件
如果物件在釋出後不會被修改,那麼對於其他在沒有額外同步的情況下安全地訪問這些物件的執行緒來說,安全釋出是足夠的。所有的安全釋出機制都能確保,當物件的引用對所有訪問該物件的執行緒可見時,物件釋出時的狀態對於所有執行緒也將是可見的,並且如果物件狀態不會再改變,那麼就足以確保任何訪問都是安全的。
如果物件從技術上來看是可變的,但其狀態在釋出後不會再改變,那麼把這種物件稱為“事實不可變物件(Effectively Immutable Object)”。這些物件不需要滿足之前提出的不可變性的嚴格定義。在這些物件釋出後,程式只需將它們視為不可變物件即可。通過使用事實不可變物件,不僅可以簡化開發過程,而且還能由於減少了同步而提高效能。
在沒有額外的同步的情況下,任何執行緒都可以安全地使用被安全釋出的事實不可變物件。
例如,Date本身是可變的,但如果將它作為不可變物件來使用,那麼在多個執行緒之間共享Date物件時,就可以省去對鎖的使用。假設需要維護一個Map物件,其中儲存了每位使用者的最近登入時間:
public Map<String, Date> lastLogin =Collections.synchronizedMap(new HashMap<String, Date>());
如果Date物件的值在被放入Map後就不會改變,那麼synchronizedMap中的同步機制就足以使Date值被安全地釋出,並且在訪問這些Date值時不需要額外的同步。
java併發程式設計實戰pdf及案例原始碼下載:
http://download.csdn.net/detail/xunzaosiyecao/9851028
作者:jiankunking 出處:http://blog.csdn.net/jiankunking
相關文章
- 《JAVA併發程式設計實戰》物件的組合Java程式設計物件
- Java併發程式設計實戰Java程式設計
- Java併發程式設計實戰--FutureTaskJava程式設計
- Java併發程式設計實戰--顯式的Condition物件Java程式設計物件
- Java併發程式設計實戰--Amdahl定律Java程式設計
- Java併發程式設計實戰總結 (一)Java程式設計
- 《JAVA併發程式設計實戰》顯式鎖Java程式設計
- Java併發程式設計實戰(4)- 死鎖Java程式設計
- Java併發程式設計實戰——讀後感Java程式設計
- Java併發程式設計實戰--筆記三Java程式設計筆記
- Java併發程式設計實戰--筆記四Java程式設計筆記
- Java併發程式設計實戰--筆記二Java程式設計筆記
- Java併發程式設計實戰--this引用逸出Java程式設計
- Java併發程式設計實戰--筆記一Java程式設計筆記
- Java併發程式設計實戰--閉鎖 CountDownLatchJava程式設計CountDownLatch
- java併發程式設計實戰-第三章-物件的共享Java程式設計物件
- 【面試實戰】# 併發程式設計面試程式設計
- Java併發設計模式--不可變模式(immutable)Java設計模式
- 《JAVA併發程式設計實戰》任務執行Java程式設計
- 《JAVA併發程式設計實戰》取消和關閉Java程式設計
- 實戰Java高併發程式設計模式視訊Java程式設計設計模式
- 《JAVA併發程式設計實戰》原子變數和非阻塞同步機制Java程式設計變數
- Java併發程式設計實踐Java程式設計
- 併發程式設計實戰——鎖分段程式設計
- Java併發程式設計實戰--計數訊號量(Semaphore)Java程式設計
- 《JAVA併發程式設計實戰》基礎構建模組Java程式設計
- Java併發程式設計 - 第十一章 Java併發程式設計實踐Java程式設計
- Java併發程式設計實戰--協作物件間的死鎖與開放呼叫Java程式設計物件
- Java併發系列—併發程式設計挑戰Java程式設計
- Java併發程式設計實戰--讀書筆記(目錄)Java程式設計筆記
- java併發程式設計實戰筆記(部分實戰未看,老舊章節跳過)Java程式設計筆記
- Java併發程式設計實踐-this溢位Java程式設計
- JAVA併發程式設計實踐 下載Java程式設計
- Java併發程式設計實戰 04死鎖了怎麼辦?Java程式設計
- Java併發程式設計實戰-王寶令-極客時間Java程式設計
- Java併發程式設計實戰(5)- 執行緒生命週期Java程式設計執行緒
- JAVA實現網路程式設計之併發程式設計Java程式設計
- Java併發程式設計實戰系列16之Java記憶體模型(JMM)Java程式設計記憶體模型