1.4 Java的 內(nèi)存模型
是否線程安全
線程安全與cpu資源的搶奪
多線程在讀寫共享變量時引發(fā)的問題
線程的原子性
多個變量訪問同一個變量的時候就會出現(xiàn)''線程安全的問題”雇寇。
Sychonize 關(guān)鍵字的使用
線程間等待喚醒機(jī)制
1.5 生產(chǎn)者消費(fèi)者模型
1.6 Locker各種鎖
CAS AQS
單列模式與多線程
-
餓漢式
懶漢式是指在類初始的已經(jīng)將對象加載完畢裳扯,最簡單的實(shí)現(xiàn)辦法就直接new一個對象聚唐,就像一個饑餓的漢子。public class Singleton{ private Singleton(){}; private static Singleton single = new Singleton(); public static Singleton getInstance(){ return single; } };
-
懶漢式
public class Singleton{ private static Singleton singleton; private Singleton(){} public static Singleton getInstance(){ if(singleton == null){ singleton = new Singleton(); } return singleton;} }
這種餓漢式的寫法在單線程環(huán)境下,初看起來是沒有問題。但是如果在多線程的環(huán)境下就回出現(xiàn)錯誤链蕊。
簡單直接的解決方案就是給 getInstance 方法加鎖。
-
方法鎖
private static Singleton singleton; private Singleton(){} public synchronized static Singleton getInstance(){ if(singleton == null){ singleton = new Singleton(); } return singleton;} }
-
代碼塊加鎖
public class Singleton{ private static Singleton singleton; private Singleton(){} public static Singleton getInstance(){ synchronized (Singleton.class){ if(singleton == null){ singleton = new Singleton(); } } return singleton; } }
-
只針對某些重要步驟加鎖
public class Singleton { private static Singleton singleton; private Singleton(){} public static Singleton getInstance(){ if(singleton == null){ synchronized (Singleton.class){ singleton = new Singleton(); } } return singleton; } }
-
使用DCL 雙檢查機(jī)制來實(shí)現(xiàn)多線程下的延遲加載
public class Singleton { private static Singleton singleton; private Singleton(){} public static Singleton getInstance(){ if(singleton == null){ synchronized (Singleton.class){ singleton = new Singleton(); } } return singleton; } }
靜態(tài)內(nèi)置類來實(shí)現(xiàn)單例模式
序列和反序列化實(shí)現(xiàn)單例模式
static靜態(tài)快實(shí)現(xiàn)單例模式
public class Singleton {
private Singleton(){
}
private static Singleton singleton = null;
static {
singleton = new Singleton();}
public Singleton getSingleton(){
return singleton;
}}
- emnu實(shí)現(xiàn)單例模式
JVM 層級.
image.png
as-if-serial
不管硬件什么順序,單線程執(zhí)行的結(jié)果不變,看上去像是 serial
ZGC 的 NUMA Aware
Non Uniform Memory Access,
分配內(nèi)存會優(yōu)先分配該線程所在的CPU的最近內(nèi)存