設計模式 單例模式(一)理論

2021-09-28 20:45:29 字數 1127 閱讀 4938

單例模式

作用:在全域性範圍內只建立該類的乙個物件例項。

使用場景:

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....