單例雙檢鎖 執行緒不一定安全,
原因:多執行緒情形下,底層指令重排問題,需要加上volitile靜止指令重排
原因在於 某乙個執行緒執行到第一次檢測,讀取到instance 不為null 時,instance 的引用物件可能沒有完成初始化
單執行緒下指令重排保證序列語義執行一致性(指令重排無關緊要),多執行緒下指令重排,語義一致性就存在潛在的風險
instace =
newsingletondemo()
;//完成此行**需要以下三步 偽碼
memory =
allocate()
//1.分配記憶體空間
instance
(memory)
//2.初始化物件
instance = memory //3.設定instance 指向剛剛分配的空間,這時 instance != null
步驟 2,3 沒有資料依賴關係,所以由於指令重排,順序有可能變化。物件還沒有初始化
package com.myspringboot.test;
public
class
singletondemo
public
static singletondemo getinstance()
}}return instace;
}public
static
void
main
(string[
] args)
,string.
valueof
(i))
.start()
;}}}
執行緒(四)解決執行緒不安全問題
一 何為執行緒不安全?執行緒安全 多執行緒併發執行時,沒有產生邏輯錯誤 執行緒不安全 多執行緒併發執行時,產生邏輯錯誤 體會執行緒不安全 static class counter public static void main string args throws interruptedexcept...
序列化,多執行緒 執行緒搶占(執行緒不安全)問題
方案一 new object 需要實現序列化 map x 結果同乙個executor不同執行緒呼叫的object為同乙個 但是 多個executor 之間不是同乙個,object先在driver建立 然後序列化,然後在executor裡反序列化 方案二new class 需要實現序列化 map x ...
設計模式之單例模式(執行緒安全和執行緒不安全的)
1 單例模式 確保某乙個類只有乙個例項物件,並提供乙個全域性的訪問點。特點 1 只有乙個例項 2 自我例項化 3 提供全域性訪問點 優點 節約系統資源,提高系統效率,同時也能控制客戶對他的訪問,但是擴充套件起來比較困難。例項 1 餓漢模式 public class student 2 懶漢模式 pu...