(單例設計模式中)懶漢式與餓漢式在多執行緒中的不同
9
120
121
122
123
124
125
126
127
128
129
130
131
|
/* 目的:分析一下單例設計模式中,懶漢式與餓漢式在多執行緒中的不同!
開發時我們一般選擇餓漢式,因為它簡單明瞭,多執行緒中不會出現安全問題!
而餓漢式需要我們自己處理程式中存在的安全隱患,但是餓漢式的程式技術含量更高!
*/ /* class SinglePerson implements Runnable{ private static SinglePerson ss = new SinglePerson("hjz", 22);//惡漢式
private int age;
private String name;
private int count;
private SinglePerson(String name, int age){
this.age = age;
this.name = name;
}
private SinglePerson(){
age = 10;
name = " ";
}
public static SinglePerson getInstance(){
return ss;
}
public String getName(){
return name;
}
public int getAge(){
return age;
}
public void setIntroduceCount(){
++count;
}
public int getIntroduceCount(){
return count;
}
public synchronized void run(){
ss.setIntroduceCount();
try{
Thread.sleep(20);
}catch(InterruptedException e){
}
System.out.println("this is " + ss.getName() + " " + ss.getAge() + " 被介紹的次數是:" + ss.getIntroduceCount());
}
} */ class SinglePerson implements Runnable{
private static SinglePerson ss = null ; //懶漢式
private int age;
private String name;
private int count;
private SinglePerson(String name, int age){
this .age = age;
this .name = name;
count= 0 ;
}
private SinglePerson(){
age = 10 ;
name = " " ;
}
/*public static SinglePerson getInstance(){
if(ss==null){//單例設計模式中,懶漢式在多執行緒中的缺憾啊!可能不能保證物件的唯一性
try{
Thread.sleep(10);
}catch(InterruptedException e){}
ss = new SinglePerson("hjz", 22);
}
return ss;
}*/
/* public static synchronized SinglePerson getInstance(){//保證了物件的唯一性,也就是安全性保證了!但是每當呼叫該函式時
if(ss==null){ //都要判斷一下同步鎖物件,降低了程式的效率!
try{
Thread.sleep(10);
}catch(InterruptedException e){}
ss = new SinglePerson("hjz", 22);
}
return ss;
} */
public static SinglePerson getInstance(){ //這就是懶漢式的安全又效率的程式碼!
if (ss== null ){ //這一句是必須判斷的!
synchronized (SinglePerson. class ){ //這一句只是其他的執行緒訪問時判斷
if (ss== null ){
try {
Thread.sleep( 10 );
} catch (InterruptedException e){}
ss = new SinglePerson( "hjz" , 22 );
}
}
}
return ss;
}
public String getName(){
return name;
}
public int getAge(){
return age;
}
public void setIntroduceCount(){
++count;
}
public int getIntroduceCount(){
return count;
}
public synchronized void run(){
ss.setIntroduceCount();
System.out.println( "this is " + ss.getName() + " " + ss.getAge() + " 被介紹的次數是:" + ss.getIntroduceCount());
}
} class OtherThread extends Thread{
public void run(){
SinglePerson.getInstance().run();
}
} public class Test{
public static void main(String[] args){
new OtherThread().start();
new OtherThread().start();
new OtherThread().start();
new Thread(SinglePerson.getInstance()).start();
}
} |
本文轉自 小眼兒 部落格園部落格,原文連結:http://www.cnblogs.com/hujunzheng/p/3876539.html,如需轉載請自行聯絡原作者
相關文章
- 設計模式-單例模式之餓漢式-多執行緒設計模式單例執行緒
- 設計模式-單例模式之懶漢式-多執行緒設計模式單例執行緒
- 設計模式:單例模式 (關於餓漢式和懶漢式)設計模式單例
- 設計模式——懶漢式單例類PK餓漢式單例類設計模式單例
- 餓漢式單例與懶漢式單例的C#實現單例C#
- C#單例—餓漢式和懶漢式C#單例
- 【java】單例設計模式——餓漢式和懶漢式、Runtime、TimerJava單例設計模式
- java單例模式懶漢和餓漢Java單例模式
- scala:分別使用懶漢式和餓漢式實現單例模式單例模式
- 詳談單例、餓漢、和懶漢模式單例模式
- 懶漢模式和餓漢模式模式
- C++單例懶漢式和多執行緒問題(MUTEX 保護)C++單例執行緒Mutex
- java學習回顧---懶漢式和餓漢式Java
- 設計模式:單例模式介紹及8種寫法(餓漢式、懶漢式、Double-Check、靜態內部類、列舉)設計模式單例
- 五種單例模式實現懶漢+餓漢+雙重檢測鎖實現+靜態內部類改進餓漢式+列舉單例模式
- java設計模式之單例模式你真的會了嗎?(懶漢式篇)Java設計模式單例
- C++之this指標、拷貝構造、賦值構造、單列模式(餓漢模式、懶漢模式)C++指標賦值模式
- 【設計模式】漢堡中的設計模式——策略模式設計模式
- 餓漢模式C++模式C++
- 別再用懶漢模式了——從JVM的角度看單例模式模式JVM單例
- 【設計模式】漢堡中的設計模式——觀察者模式設計模式
- 網頁設計中漢堡選單的利與弊網頁
- 設計模式之單例模式(執行緒安全)設計模式單例執行緒
- Java多執行緒程式設計筆記10:單例模式Java執行緒程式設計筆記單例模式
- 在單獨執行緒中執行物件成員函式 (轉)執行緒物件函式
- 程式設計思想之多執行緒與多程式(3):Java 中的多執行緒程式設計執行緒Java
- Qt中的多執行緒與執行緒池淺析+例項QT執行緒
- JAVA_多執行緒_單例模式Java執行緒單例模式
- 程式設計思想之多執行緒與多程式(4):C++ 中的多執行緒程式設計執行緒C++
- 正規表示式刪除字串中的漢字字串
- Future --- 多執行緒設計模式執行緒設計模式
- Java在不同執行緒中執行程式碼Java執行緒行程
- 執行緒安全的單例模式執行緒單例模式
- 多執行緒下的單例執行緒單例
- 【設計模式】實現執行緒安全單例模式的五種方式設計模式執行緒單例
- synchronized 同步執行緒 單例設計模式+double checkingsynchronized執行緒單例設計模式
- iOS中的單例設計模式iOS單例設計模式
- Java多執行緒設計模式(1)Java執行緒設計模式