/**
* 餓漢式單例
* * 單例的特徵:私有的構造方法 對外提供獲取的方法 在多併發情況下獲取的永遠是同乙個物件
* */
public class hungrysingle
private static hungrysingle single = new hungrysingle();
public static hungrysingle getinstance()
}//建立執行緒類
public class executorthread implements runnable
}/**
*測試
* 懶漢式單例----執行緒非安全
* */
public class lazysingle
private static lazysingle single = null;
/** 執行緒非安全解析:(t1:執行緒1 t2:執行緒2)
* 1:執行緒的執行過程就是搶占cpu時間片的過程。所以執行緒的執行先後順序是不可控的。
* 2:比如 t1 和 t2同時進入到了if的判斷。這兩個此時的single都為null, 所以這兩個執行緒都會new 乙個物件。
* 這就造成了執行緒非安全
*/public static lazysingle getinstance()
return single; }}
public class executorthread implements runnable
}//測試
public class test
}
出現了兩個不同的物件
* synchronized鎖再靜態方法上, 就是對整個class加鎖。
* 當t1進入物件時,t1執行緒的狀態變為running狀態,safelazysingle被上了鎖,
* 此時如果t2也要進入該物件,t2無法進入,只能處於mirror狀態。知道t1執行完,t2才能
* 重新競爭獲得鎖。
* * 缺點:synchronized比較浪費資源 整個物件容易造成死鎖
*/public class safelazysingle
private static safelazysingle single = null;
public static synchronized safelazysingle getinstance()
}public class executorthread implements runnable
}//測試
public class test
}
//優化由於synchronized放於static方法造成死鎖問題。
//雙重檢查鎖
public class doublechecklazysinglebatter
private static doublechecklazysinglebatter single = null;
/* * 分析:當t1 和 t2 同時進入到第乙個if判斷,兩個執行緒同時進入到了該方法。
* 隨後其中乙個執行緒比如就是t1會獲得物件的鎖,t2就會進入到wait狀態。t2直到t1執行完才會重新獲得物件的鎖
* * 但是t2進入後,之前的判斷single還是null的。 但是t1已經建立了乙個例項, 所以再進行if判斷前面的執行緒是否已經
* 建立了物件
*/public static doublechecklazysinglebatter getinstance()
}}
return single; }}
public class executorthread implements runnable
}//測試
public class test
}}
public class innersingle
public static innersingle getinstance()
static class createsingle
}public class executorthread implements runnable
}//測試
public class test
}}
Singleton 單例 模式
singleton 模式的宗旨在於確保某個類只有乙個例項,別且為之提供乙個全域性訪問點。為了防止其他工作人員例項化我們的類,可以為該類建立唯一乙個構造器,並將構造器的可見 設定為私有。值得注意的是,如果我們建立了其他的非私有的構造器,或者根本沒有為該類提 供構造器,那麼其他人員還是能例項化我們的類。...
Singleton 單例 模式
今天看了,單例模式。感覺他的本質就是,控制類例項的個數。特例就是,控制static變數的唯一性,保證各個程式共享著同一例項。乙個例子 package singleton description 這是乙個單例模式的使用demo author kyle goal 實現乙個類僅有乙個例項 singleto...
單例(Singleton)模式
單例模式的特點 singleton模式包含的角色只有乙個,那就是singleton。singleton擁有乙個私有建構函式,確保使用者無法通過new取得singleton的例項。除此之外,該模式中包含乙個靜態私有成員變數instance與靜態公有方法instance。instance方法負責檢驗並例...