單例項和多例項的區別以及用途

2022-08-12 12:24:12 字數 1003 閱讀 4411

1.單例項和多例項

單例項一般會在類中自己例項化,通過getinstance獲取該例項。ps:

* 單例模式

public class singleton

public static singleton getinstance()

publicstaticmultiton getinstance(intkey)else

}/**

* 獲取1—6之間的隨機數

*/publicvoidgetvalue()

}/**

* 多例模式測試

*@authorsolid**/

publicclasstestmultiton

}2. 為什麼用單例、多例:

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

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

用單例和多例的標準只有乙個:

當物件含有可改變的狀態時(更精確的說就是在實際應用中該狀態會改變),則多例,否則單例;

3. 何時用單例?何時用多例?

對於struts2來說,action必須用多例,因為action本身含有請求引數的值,即可改變的狀態;

而對於struts1來說,action則可用單例,因為請求引數的值是放在actionform中,而非action中的;

另外要說一下,並不是說service或dao一定是單例,標準同第3點所講的,就曾見過有的service中也包含了可改變的狀態,同時執行方法也依賴該狀態,但一樣用的單例,這樣就會出現隱藏的bug,而併發的bug通常很難重現和查詢;

spring 單例項和多例項

package com.atguigu.config import com.atguigu.bean.color import com.atguigu.bean.colo ctorybean import com.atguigu.bean.person import com.atguigu.bean...

redis單主機多例項

假設我們伺服器上面已經安裝好了redis 可參看 下面我們來配置redis單主機多例項 我們首先拷貝兩份檔案 root infa redis 2.8.12 cp etc redis.conf etc redis6380.conf root infa redis 2.8.12 cp etc redis...

oracle例項 schema,以及多租戶方案

從定義中我們可以看出schema為資料庫物件的集合,為了區分各個集合,我們需要給這個集合起個名字,這些名字就是我們在企業管理器的方案下看到的許多類似使用者名稱的節點,這些類似使用者名稱的節點其實就是乙個schema,schema裡面包含了各種物件如tables,views,sequences,sto...