线程安全-常用的模式
生活随笔
收集整理的這篇文章主要介紹了
线程安全-常用的模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
線程安全-常用的模式
- 1.對象安全發布的幾種方式
- 2. 線程安容器
- 3.使用靜態初始化器 發布安全對象
- 4. 擴展
- 4.1 名詞解釋
- 4.2 互斥的理解
- 4.3 同步的理解
- 4.4 安全發布
1.對象安全發布的幾種方式
安全發布一個對象,對象的引用和對象的狀態,必須是對其他對象可見的。
下面是對象可以安全發布的幾種方式
- 在靜態函數中初始化一個對象
- 將對象保存到 volatile 或者 atomicReferance對象中
- 將對象的引用保存到 某個正確構造對象的 final 類型域中國。
- 將對象引用保存到一個由鎖保護的域中。
線程安全容器的同步,指的是 將對象放入到某個容器 即:(將對象引用保存到一個由鎖保護的域中)
- 例如 vector ,synchronizedList 中。 如果線程A 將對象X放入到 一個線程安全的容器中,隨候線程B讀取這個對象,那么可以確保B 看到線程A 設置X的狀態,即便 這塊讀/寫 X應用程序代碼沒有包含在顯示的同步。
2. 線程安容器
后續補充
3.使用靜態初始化器 發布安全對象
通常 發布一個靜態構造對象 ,是最簡單和最安全的方式,是使用靜態初始化器。
下面展示一些 內聯代碼片。
靜態初始化器由jvm 在類的初始化階段執行。由于jvm 內部的同步機制,因此通過這種方式 初始化任何對象 都可以被安全的發布。
4. 擴展
4.1 名詞解釋
- 安全發布
- 安全性失敗
- 活性失敗
4.2 互斥的理解
互斥:當一個對象被一個線程修改的時候,可以阻止另一個線程觀察到對象內部的不一致的狀態??梢岳斫鉃?#xff0c;對象被創建的時候處于一致的狀態,當有方法訪問它的時候,它就被鎖定了。這些方法觀察到對象的狀態,并且可能會引起狀態轉變,即把對象從一個狀態轉換到另一種狀態。正確的使用同步可以保證沒有任何方法會看到對象處于不一致的狀態。
4.3 同步的理解
1.同步 對進入同步方法或者同步代碼塊的每個線程,都看到由同一個鎖保護的之前所有的修改結果。
2.阻止沒有進入的到同步方法或者代碼塊的線程,看到對象處于不一致的狀態。
3.同步歸功于 java內容模型,它規定了一個線程所做的變化何時以及如何變成,對其他線程可見。
4.4 安全發布
- 1.將它保存在靜態域中。
- 2.作為類初始化的一部分。
- 3.可以保存在volatile,final。
- 4.者通過正常鎖定訪問的域中。
- 5.將它放在并發集合中。
總結:
- 只有共享的數據(全局指的是 工具類,或者是全局緩存類,工具類中的成員變量,使用日期轉化SimpleDateFormat ),需要考慮線程安全問題。
項目中的DTO 代碼中的 非全局共享的,使用的對象用不到 線程安全,也不用考慮線程安全問題,調用過程中,每次都會創建對象。
- 參考:
- 《effective java》
- 《java并發編程的藝術》
總結
以上是生活随笔為你收集整理的线程安全-常用的模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信号与系统奥本海姆第二版课后习题答案与详
- 下一篇: thinkphp5.1 php7,空白目