(1)單例模式特點(什么是單例模式)?
a.單例類只能有一個實例。
b.單例類必須自己創建自己的唯一實例。
c.單例類必須給所有其他對象提供這一實例。
(2)單例模式的作用(用單例模式的目的)?
Singleton模式主要作用是保證在Java應用程序中,一個類Class只有一個實例存在。
(3)一般Singleton模式通常有幾種種形式:
通常有3中形式(回答2種的也對,因為第3種不常見)
第一種形式: 餓漢式單例類
//餓漢式單例類.在類初始化時,已經自行實例化
public class Singleton {
private Singleton(){}
private static Singleton instance = new Singleton();
public static Singleton getInstance() {
return instance;
}
}
第二種形式:懶漢式單例類
public class Singleton {
private Singleton(){}
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
if (instance==null)instance=new Singleton();
return instance;
}
}
第三種形式:登記式單例(省略)
(4)哪一種模式更安全?為什么?
第一種形式要更加安全些
instance = new Singleton();
static屬於類的資源,類資源在jvm加載類的時候就加載好了,instance一直引用這new Singleton(),所以永遠都不會釋放一直存在與內存中直到程序結束運行
第2種的話如果兩個線程同一時刻去訪問getInstance的時候就可能創建兩個實例,所以不安全
解決辦法(加上同步鎖)