生活随笔
收集整理的這篇文章主要介紹了
五、单件模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
經典單件
public class Singleton {
private static Singleton uniqueInstance;
private Singleton() {}
public static Singleton
getInstance() {
if (uniqueInstance ==
null) {uniqueInstance =
new Singleton();}
return uniqueInstance;}
}
線程安全的單件
public class Singleton {
private static Singleton uniqueInstance =
new Singleton();
private Singleton() {}
public static Singleton
getInstance() {
return uniqueInstance;}
}
public class Singleton {
private static Singleton uniqueInstance;
private Singleton() {}
public static synchronized Singleton
getInstance() {
if (uniqueInstance ==
null) {uniqueInstance =
new Singleton();}
return uniqueInstance;}
}
public class Singleton {
private volatile static Singleton uniqueInstance;
private Singleton() {}
public static Singleton
getInstance() {
if (uniqueInstance ==
null) {synchronized (Singleton.class) {
if (uniqueInstance ==
null) {uniqueInstance =
new Singleton();}}}
return uniqueInstance;}
}
個人理解
單件模式確保一個類只有一個實例,并提供一個全局訪問點。
在經典的單件模式中,如果有兩個線程訪問一個單件模式,會發生線程安全的問題,產生兩個單件實例。
解決方法:
1、在單件中直接生成單件對象,然后返回。(如果單件對象創建的開銷比較大,會造成資源浪費)
2、在單件的全局訪問點上使用synchronized 關鍵字,可以解決問題。(線程同步會降低性能)
3、使用雙重檢查加鎖的方式,完美的解決問題。
轉載于:https://www.cnblogs.com/huacesun/p/6622496.html
總結
以上是生活随笔為你收集整理的五、单件模式的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。