看到一些討論volatile用法的文章里面把單例模式的代碼寫成了如下的樣子,
class Singleton {
private static volatile Singleton singleton;
private Singleton() {}
public static Singleton getInstance() {
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}
為什么這樣寫那?
把getInstance() 寫成同步方法不就完事了嗎???
public static synchronized Singleton getInstance() { ... }
兄弟們有什么想法,還請指教,謝謝。
uj5u.com熱心網友回復:
synchronized在方法上, 粒度高了,方法呼叫頻繁,每次都要上鎖,降低呼叫效率,極端情況可能會致死鎖uj5u.com熱心網友回復:
這種單例模式常見的問題問的太多了。LZ自己參考以下鏈接,雙檢鎖 部分的說明吧
https://blog.csdn.net/fly910905/article/details/79286680
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/191106.html
標籤:Java SE
