/**
* 1. 懶漢(延遲載入)
* 2. 正確
* 3. 效率還比較高
* 通過
* 1. volatile 的引入,目的解決 ins = new ...(); 重排序帶來的問題
* 2. synchronized 的引入,目的是解決原子性問題
* 3. 見方法注釋
*/public
class
lazysingleton3
//乙個獲得 ins 的方法
public
static lazysingleton3 getinstance3()
}}return ins;
}//建立乙個執行緒的類
static
class
mythread
extends
thread
}//將這個程式以多執行緒執行
public
static
void
main
(string[
] args)
for(
int i =
0; i <
20; i++)/*
單例模式之懶漢1 ins1 = 單例模式之懶漢1.getinstance();
單例模式之懶漢1 ins2 = 單例模式之懶漢1.getinstance();
單例模式之懶漢1 ins3 = 單例模式之懶漢1.getinstance();
system.out.println(ins1 == ins2);
system.out.println(ins2 == ins3);
*/}}
懶漢の單例模式:
單例:只例項化乙個物件。
與餓漢的開局就初始化不同,懶漢只是在有執行緒呼叫它時才會初始化物件,此舉目的為節省記憶體空間。
若無synchronized 則會存在原子性不能保證的問題,可能會new出多個物件,不符合單例的情況。
若無外邊的if(ins==null),那麼會導致整個**效率變低,因為在第一次new物件後,這個鎖依舊會被互斥執行緒搶。
若無全域性變數 ins 前的volatile,那麼ins這個物件內部的(開闢空間,初始化,給引用賦值)三個大步驟會有重排序的問題。
設計模式 單例模式之懶漢式 多執行緒
package cn.itcast 03 單例模式 餓漢式 類一載入就建立物件 懶漢式 用的時候,才去建立物件 面試題 單例模式的思想是什麼?請寫乙個 體現。開發 餓漢式 是不會出問題的單例模式 面試 懶漢式 可能會出問題的單例模式 思想 a 懶載入 延遲載入 用的時候才去載入 b 執行緒安全問題 ...
設計模式之單例模式 2 懶漢式及其多執行緒問題
學習設計模式的日常demo 懶漢式 執行緒不安全 實現 public class lazysingleton01 class lazysingleton private static lazysingleton instance 提供靜態方法,當使用該方法時,才去建立例項物件 public stat...
單例模式之懶漢式
1.思想 為了解惡漢式設計的弊端,我們在建立物件時不會預設例項化。2.解決方法,利用if語句來解決重複空間的問題 public class singleton1 private static singleton1 single null public static singleton1 getsin...