單例模式作用:在全域性範圍內只建立該類的乙個物件例項。
使用場景:
1、spring大多數物件都是單例存在的。一般被spring管理的bean,都是業務物件,不是資料物件。
2、資料來源等資訊
單例的實現步驟:
1.構造私有
2.私有靜態成員變數(如果宣告靜態成員變數時就進行初始化,則是餓漢式,否則是懶漢式)
3.公開靜態成員方法,獲取靜態成員變數
單例解釋知識1.new student
2.訪問類的靜態成員時
當乙個類被jvm載入的時候,該類的載入過程是執行緒安全的,也就是說,相當於jvm對該過程加鎖了。
單cpu的情況,執行緒在執行時,巨集觀上是並行的,其實微觀上是序列的,執行緒是通過分配cpu的時間片去執行的。
乙個執行緒的執行需要被cpu分配好幾次時間片才能執行完成。
1.new 會觸發類載入機制(已經被載入過的類不需要再次載入)
2.分配堆記憶體空間(相當於已經有記憶體位址)
3.將物件進行初始化(將成員變數初始化為0)
4.將物件引用位址賦值給棧空間中的變數
jvm的jit即時編譯器會對**的執行過程進行優化,包含**的執行順序。
也就是說以上物件的建立過程,可能被jit即時編譯器優化為1-2-4-3(指令重排序)。
原子性、有序性、可見性
原子性
主要針對的不是高階語言的原子性,而是位元組碼或者機器碼的原子性操作。
new student();//也不是原子性操作
i++;//不是原子性操作
1.先從區域性變數表中獲取i的值
2.將i的值加入到操作棧中
3.將操作棧中的i進行自加
4.將自加的i值放入操作棧
5.將操作棧的棧頂元素取出並放入區域性變數表
如何保證原子性呢?
使用鎖機制(synchronized和lock鎖)
可見性
設計模式 一 單例模式
思路 1 如果其他程式能夠隨意用new建立該類物件,那麼就無法控制個數。因此,不讓其他程式用new建立該類的物件。2 既然不讓其他程式new該類物件,那麼該類在自己內部就要建立乙個物件,否則該類就永遠無法建立物件了。3 該類將建立的物件對外 整個系統 提供,讓其他程式獲取並使用。步驟 1 將該類中的...
設計模式(一) 單例模式
這種模式只涉及到乙個單一的類,該類負責建立自己的物件,並確保只建立乙個物件。單例只有乙個例項 單例類必須建立自己唯一的例項 單例類必須給其他物件提供這唯一的例項 由於當今的程式設計模型都是基於多執行緒方式,因此此處只介紹執行緒安全的幾種實現。第一次被呼叫時才建立物件,屬於懶載入 lazy init ...
設計模式(一) 單例模式
單例模式 保證執行記憶體中只有乙個實體的實現模式就是單例模式,最常見的有餓漢模式 懶漢模式兩種。餓漢模式 package com.madg.design.singleton public class hungry public hungry getinstance 懶漢模式 package com....