單例模式的特點:
只建立一次
私有的屬性
公有的訪問方法
單例模式的分類:
懶漢(lazysingleton);預設不自動例項化,等到用的時候根據當前情況例項化,並且返回當前物件;
惡漢(eagersingleton);在類第一次載入的時候強制例項化;
用處:一般用在配置檔案的讀取,有些東西只需要載入一次,以後重複使用。
示例**:
package mythread;
/**
* 單例模式,懶漢模式
* * @author champion.wong
* */
public class lazysingleton
/**
* 靜態工廠,返回此類的唯一乙個例項 判斷,如果沒有被例項化,則先初始化再返回
* * @return lazysingleton
*/
public static lazysingleton getinstance()
}
package mythread;
/**
* 單例模式,餓漢模式
* @author champion.wong
* */
public class eagersingleton
public static eagersingleton getinstance()
}
前邊說過了,單例只建立一次,來做個測試,在單例的類中加入乙個屬性,當這個類在例項化的時候,會將當前的時間賦給這個屬性。我們建立兩個單例類的物件,然後分別拿出它們類中的這個屬性進行對比。
所以,在eagersingleton中加入屬性:createdtime
package mythread;
/**
* 單例模式,餓漢模式
* @author champion.wong
* */
public class eagersingleton
public static eagersingleton getinstance()
private long createdtime = 0l; //此類的建立時間,在類例項化的時候賦值
public long getcreatedtime()
}
然後,寫個test:
package mythread;
public class test_singleton catch (interruptedexception e)
eagersingleton singleton2 = eagersingleton.getinstance();
system.out.println("singleton1:" + singleton1.getcreatedtime());
system.out.println("singleton2:" + singleton2.getcreatedtime());
} }
最後控制台輸出的內容為:
兩個物件的例項化的時間相同,證明單例設想成功!
當多個執行緒訪問單例類的時候,必須要保證同時只能由乙個執行緒訪問,當這個執行緒訪問結束了,其它執行緒才能訪問。這是就要給單例的訪問方法加個同步鎖(synchronized)。
修改後的lazysingleton為:
package mythread;
/**
* 單例模式,懶漢模式
* * @author champion.wong
* */
public class lazysingleton
/**
* 靜態工廠,返回此類的唯一乙個例項 判斷,如果沒有被例項化,則先初始化再返回
* * @return lazysingleton
*/
synchronized public static lazysingleton getinstance() catch (interruptedexception e)
return singleton;
} }
做個測試,起兩個執行緒,沒個執行緒中分別呼叫單例類的訪問方法,每次訪問的時候輸出訪問的時間,判斷時間是否相等。如果相等,同步失敗,如果不等,同步成功!
package mythread;
public class test_thread_singleton
} class singletonthread extends thread catch (interruptedexception e)
singleton = lazysingleton.getinstance();
} }
}
看控制台的輸出內容:
時間差不多都不一致,同步成功!限制了同時訪問。
Java多執行緒20 單例設計模式
單例設計模式 保證類在記憶體中只有乙個物件。如何保證類在記憶體中只有乙個物件?1 控制類的建立,不讓其他類來建立本類的物件。private 2 在本類中定義乙個本類的物件。3 提供公共的訪問方式,例如 public static myobject getinstance 單例寫法兩種 1 餓漢模式。...
Java多執行緒 48 單例設計模式
前面學習了多執行緒的一些知識,這篇來學習並掌握什麼是單例設計模式,以及常見的單例模式寫法有哪些。先來理解什麼是單例模式,單例就是保證類在記憶體中只有乙個物件。我們知道,類是可以通過多種方式去獲取物件,例如常見的new物件。在記憶體中只有乙個物件,如果這句話不好理解。這裡,很多人都用過selenium...
多執行緒 多執行緒 單例設計模式
多執行緒之 單例設計模式 餓漢式 多執行緒安全 1 餓漢式 class single static single getinstance public void show class a implements runnable class test catch interruptedexceptio...