摘要:線程封閉當訪問共享的可變數據時,通常需要使用同步。如果僅在單線程內訪問數據,就不要同步。這種技術成為線程封閉。棧封閉棧封閉是線程封閉的一種特例,在棧封閉中,只能通過局部變量才能訪問對象。,對象是正確創建的。
線程封閉
當訪問共享的可變數據時,通常需要使用同步。一種避免使用同步的方式就是不共享數據。如果僅在單線程內訪問數據,就不要同步。這種技術成為線程封閉(Thread Confinement)。Ad-hoc 線程封閉
Ad-hoc 線程封閉是指維護線程封閉的職責完全是由程序自己來承擔。棧封閉
棧封閉是線程封閉的一種特例,在棧封閉中,只能通過局部變量才能訪問對象。ThreadLocal類
ThreadLocal提供了set和get等訪問接口或方法,這些方法為每個使用該變量的線程都存有一份獨立的副本,因此get總是返回由當前執行線程在調用set設置的最新值。
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; /** * ConnectionDispenser * * Using ThreadLocal to ensure thread confinement * * @author Brian Goetz and Tim Peierls */ public class ConnectionDispenser { static String DB_URL = "jdbc:mysql://localhost/mydatabase"; private ThreadLocal不變性connectionHolder = new ThreadLocal () { public Connection initialValue() { try { return DriverManager.getConnection(DB_URL); } catch (SQLException e) { throw new RuntimeException("Unable to acquire Connection, e"); } }; }; public Connection getConnection() { return connectionHolder.get(); } }
滿足同步需求的另一種方法是使用不可變對象。1,對象創建以后其狀態就不能修改。2,對象的所有域都是final類型。3,對象是正確創建的。
Final域關鍵字final可以視為C++中const機制的一種受限版本,用于構造不可變對象。 (引用不可變,引用的對象是可變的)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/74403.html
摘要:對象的組合介紹一些組合模式,這些模式能夠使一個類更容易成為線程安全的,并且維護這些類時不會無意破壞類的安全性保證。狀態變量的所有者將決定采用何種加鎖協議來維持變量狀態的完整性。所有權意味著控制權。 對象的組合 介紹一些組合模式,這些模式能夠使一個類更容易成為線程安全的,并且維護這些類時不會無意破壞類的安全性保證。 設計線程安全的類 在設計線程安全類的過程中,需要包含以下三個基本要素: ...
摘要:無狀態的是線程安全的,當無狀態變為有狀態時就是不安全的破壞了線程的安全性,非原子性操作競態條件在并發編程中,由于不恰當的執行時序而出現的不正確結果是一種非常重要的情況,被稱之為競態條件。重入意味著獲取鎖的操作的粒度是線程,而不是調用。 這本書的內容是什么? 本書提供了各種實用的設計規則,用于幫助開發人員創建安全的和高性能的并發類。 什么類是線程安全的? 當多個線程訪問某...
摘要:對象的共享上一章介紹了如何通過同步來避免多個線程在同一時刻訪問相同的數據,而本章將介紹如何共享和發布對象,從而使它們能夠安全地由多個線程同時訪問。為了確保多個線程的之間對內存寫入操作的可見性,必須使用同步機制。 對象的共享 上一章介紹了如何通過同步來避免多個線程在同一時刻訪問相同的數據,而本章將介紹如何共享和發布對象,從而使它們能夠安全地由多個線程同時訪問。 列同步代碼塊和同步方法可...
摘要:上集算法實現的優點當一個線程執行任務失敗不影響其他線程的進行最大限度的利用資源能提高程序的伸縮性伸縮性不修改任何代碼升級硬件就能帶來性能上的提高升級硬件帶來的性能提高明顯就是伸縮性良好的缺點代碼復雜影響閱讀性剛開始看的時候沒有正確的思路理解 ConcurrentLinkedQueue(上集) 算法實現 CAS CAS的優點 當一個線程執行任務失敗不影響其他線程的進行 最大限度的利用...
摘要:過程是一個計算單元,計算是通過通訊來完成的。標題的表達式里還有一個符號,表示一個無行為的過程。一個過程的是它和外部產生行為交互的唯一方式。所以如果兩個過程需要通過一個交互,這個必須在兩個過程中都是,其中一方用于發送,另一方用于接收。 這篇文章的標題是一個π表達式,結尾是一段JavaScript代碼,和這個表達式的含義完全一致,或者說,完成了這個表達式的估值。 π演算(π calculu...
閱讀 2987·2021-11-23 09:51
閱讀 2798·2021-11-11 16:55
閱讀 2908·2021-10-14 09:43
閱讀 1394·2021-09-23 11:22
閱讀 1035·2019-08-30 11:04
閱讀 1663·2019-08-29 11:10
閱讀 956·2019-08-27 10:56
閱讀 3102·2019-08-26 12:01