單例和多例的區別

2022-01-15 11:56:06 字數 1219 閱讀 7735

所謂單bai例就是所有的請求都用乙個物件來處理,du比如我們常用的service和dao層的zhi對dao象通常都是單例的,而多例則指每個請求用乙個新的物件來處理,比如action;

1. 單例模式和多例模式屬於物件模式。

2. 單例模式的物件在整個系統中只有乙份,多例模式可以有多個例項。

3. 它們都不對外提供構造方法,即構造方法都為私有。

之所以用單例,是因為沒必要每個請求都新建乙個物件,這樣子既浪費cpu又浪費記憶體;

之所以用多例,是為了防止併發問題;即乙個請求改變了物件的狀態,此時物件又處理另乙個請求,而之前請求對物件狀態的改變導致了物件對另乙個請求做了錯誤的處理;

由spring管理的物件,預設都是單例的!並且,都是餓漢式的單例模式。

在配置節點時,可以新增scope屬性其是否單例,當取值為singleton時表示單例,該值也是預設值,當取值為prototype時表示非單例:

"

user

"class="

cn.tedu.spring.user

"scope="

prototype

">

在單例模式的基礎之上,還可以通過lazy-init屬性配置它是否為懶漢式的單例模式,預設值為false,即非懶漢式,也就是餓漢式的單例模式,當取值為true時,表示懶漢式的單例模式:

"

user

"class="

cn.tedu.spring.user

"scope="

singleton

"lazy-init="

true

">

第一種:懶漢式(執行緒不安全,加上synchronized後執行緒安全)

public

class

singleton

public

static

synchronized singleton getinstance()

return

instance;

}}

第二種:餓漢式(執行緒安全)

public

class

singleton

public

static

singleton getinstance()

}

單例和多例的區別

單例模式的物件在整個系統中只有乙份,也就是只有乙個物件,而多例模式可以有多個。在記憶體當中體現為單例模式只占用乙份儲存空間,節約伺服器資源而多例模式每次例項化都要新開闢一快記憶體 單例模式記憶體分析可參考 在應用上單例模式多用於多執行緒類業務如購票系統 秒殺系統,通過物件鎖確保物件全域性唯一,防止程...

單例和多例的區別

單例多例需要搞明白兩個問題 1.什麼是單例多例 所謂單例就是所有的請求只有乙個物件來處理,比如常用的service和dao層的物件都是通過單例建立 的,多例就是每個請求都有乙個新的物件來處理,比如action 單例多例都屬於物件模式,單例在整個系統中只有乙個,多例存在多個例項 對外都不提供私有方法,...

單例和多例

單例模式 兩種寫法 一.懶漢式 最簡單的寫法 怕多執行緒 中間的寫法 無法實現多執行緒 雙鎖的寫法 實現了執行緒安全,並保留了多執行緒。特點 1 單例類只能有乙個例項。2 單例類必須自己建立自己的唯一例項。3 單例類必須給所有其他物件提供這一例項。public class user private ...