【單例模式】懶漢式的線程安全問題 volatile的作用


原文鏈接:https://blog.csdn.net/Activity_Time/article/details/96496579


1. 懶漢式的Java實現
public class Singleton {

	// 唯一實例
	private volatile static Singleton instance = null;

	// 私有構造
	private Singleton() {
		System.out.println("Singleton構造" + this);
	}

	// 獲取實例
	synchronized public static Singleton getInstance() {
		return instance == null ? (instance = new Singleton()) : instance;
	}

}

2. 多線程環境下單例模式的線程安全性問題:

餓漢模式的單例模式:在多線程環境下,線程安全
懶漢模式的單例模式:在多線程環境下,線程不安全

顯然由於判空以及創建對象是非原子性的操作,在多線程情境下會發生臟讀等問題
需要對該過程進行同步,同時為確保將變量的更新操作通知到其他線程要使用volatile關鍵字

3. volatile關鍵字(線程可見性)

Java中Volatile關鍵字詳解:https://www.cnblogs.com/zhengbin/p/5654805.html#_label1
Java內存模型:https://www.cnblogs.com/zhengbin/p/6407137.html
在這里插入圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM