1. 程式人生 > >JAVA中單例與多例的實現

JAVA中單例與多例的實現

這是幾天的學習自己總結下來的一些關於自己對單例和多例的想法。。。。。。(不能與大神的理解相提並論微笑微笑) 單例的第一種
/*懶漢式*/
public class Single {
	private static Single s=null;
	private Single(){//封裝建構函式
	}
	public synchronized static Single getInstance(){//設定模板鎖---控制好每一個拿到的都是同一個  這樣在多執行緒可以保證每一個執行緒拿到的物件都是同一個物件
		if(s==null){
			s = new Single();
		}
		return s;
	}
}

單例的第二種
/*惡漢式*/
public class Single2 {
	private final static Single2 s=new Single2();
	private Single2(){
	}
	public static Single2 getInstance(){
		return s;
	}
	
}
第二種並不需要加上執行緒鎖,,因為在最開始的第一個就new了物件,其餘直接給物件不會開新的物件 多例的第一種
import java.util.HashMap;
import java.util.Map;

public class A {
	private static Map<String, A>map= new HashMap<String, A>();
	public static A getInstance(String key){
		//到容器(快取)中去查詢key所對應的物件,如果沒有,那麼就new一個放到容器中
		A a = map.get(key);
		if(a==null){
			map.put(key, a);
		}
		return a;
	}
}

多例的第二種
import java.util.HashMap;
import java.util.Map;

public class AA {
	private static Map<Integer, AA>map= new HashMap<Integer, AA>();
	private static int count=3;//控制快取中例項的總數(該整數可以採用使用者設定或讀取配置檔案的方式更改)
	private static int num=1;//當前例項的序號----用num來當作內部維護的key
	public static AA getInstance(String key){
		AA a = map.get(num);
		if(a==null){
			a = new AA();
			map.put(num, a);
		}
		num++;
		if(num>count){
			num=1;
		}
		return a;
	}
}


相關推薦

JAVA實現

這是幾天的學習自己總結下來的一些關於自己對單例和多例的想法。。。。。。(不能與大神的理解相提並論) 單例的第一種 /*懶漢式*/ public class Single { private sta

建立一個簡單spring例項,spring,初始化銷燬

(1)在配置完spring提示框架後(上一遍文章有介紹),首先建立一個專案,匯入sprig所需的jar包然後書寫主配置檔案applicationContext.<?xml version="1.0" encoding="UTF-8"?> <beans xml

的差別

簡單理解單例多例,比如: 你用杯子喝可樂,喝完了不刷,繼續去倒果汁喝,就是單例。 你用杯子喝可樂,直接扔了杯子,換個杯子去倒果汁喝,就是多例。 單例多例需要搞明白兩個問題: 1. 什麼是單例多例;2. 如何產生單例多例;3. 為什麼要用單例多例4. 什麼時候用單例,什麼

執行緒安全()

      又週五了,時間過得好快,住在集體宿舍,幾個宅男共處一室好是無聊,習慣性來到CSDN。今天一個應屆生同事突然問我為什麼老大要求我們不要在Service裡寫成員變數,說不安全,說為什麼不安全讓他自己去了解,看上去他沒有找到頭緒很是痛苦,想想當初這個問題也困擾過自己,向

C#型別後問號問號含義

 在C#中有時會碰到變數型別後面個單問號或雙問號,如下int? id = null; private string GetData( ) { //邏輯處理; return data ?? "OK"; } 1、單問號:表示用於給變數賦初值,給變數(int型別)賦值

Java關於繼承型的一道選擇題

先上題目: interface A { public String show(); } class B implements A { public String show() {

java引號雙引號的區別?hashcode()和equals()

單引號引的資料 是char型別的 雙引號引的資料 是String型別的 單引號只能引一個字元 而雙引號可以引0個及其以上 hashcode這個方法是用來鑑定2個物件是否相等的。 一般來講,equals這個方法是給使用者呼叫的,如果你想判斷2個物件是否相

java的區別

單例 多例 區別 線程 1. 什麽是單例多例:所謂單例就是所有的請求都用一個對象來處理,比如我們常用的service和dao層的對象通常都是單例的,而多例則指每個請求用一個新的對象來處理,比如action; 2. 如何產生單例多例:在通用的SSH中,單例在spring中是默認的,如果要產生多例

java如何運用

單例多例需要搞明白兩個問題: 1. 什麼是單例多例; 2. 如何產生單例多例; 3. 為什麼要用單例多例 4. 什麼時候用單例,什麼時候用多例; 1. 什麼是單例、多例: 所謂單例就是所有的請求都用一個物件來處理,比如我們常用的service和dao

java

你用杯子喝可樂,喝完了不刷,繼續去倒果汁喝,就是單例。 你用杯子喝可樂,直接扔了杯子,換個杯子去倒果汁喝,就是多例。 資料庫連線池就是單例模式,有且僅有一個連線池管理者,管理多個連線池物件。 1. 什麼是單例多例: 所謂單例就是所有的請求都用一個物件來處理,比如我們常用的s

Java模式簡單工廠模式的簡單例項介紹

1:單例設計模式 單例模式也稱為單件模式、單子模式,可能是使用最廣泛的設計模式。其目的是保證一個類僅有一個例項,並提供一個訪問它的全域性訪問點,該例項被所有程式模組共享。單例模式又包含 餓漢式和懶漢式

JAVA 類如何只實化一次(模式)

回來 記錄 實例 static ret clas 實例化 best pub 以前只運用過單例模式,但是沒有具體的了解過單例模式的含義,今天去面試讓一下一個類只實例化一次,想了好久沒想出來,回來查了資料才知道是單例模式,記錄下來。public class Singleton

java

單個 static 改變 cpu lazy pack out ont 通過 背景:最近在學習韓老師的筆記時候發現不是很了解單例和多例,於是通過網上查找資料的方式去學習。 設計模式:最佳的實踐,是軟件開發人員在軟件開發過程中面臨一般解決方案,也就是開發的經驗總結。 單例模式(

java態模式或模式(Singleton)有什麽意義?

ESS 兩張 oid 什麽 else 不能 spa lse new 8.單態模式或單例模式(Singleton) (視頻下載) (全部書籍)單態模式有什麽用呢?想一下Adobe Photoshop ,處理兩張圖,會啟動兩個photoshop嗎?多耗費內存呀! ( Cons

java請給一個Abstract類實現接口的實

let source Beginner 方法體 1.2 lan str example not 2.Abstract類實現接口 (視頻下載) (全部書籍) 馬克-to-win:如果實現某接口的類是abstract類,則它可以不實現該接口所有的方法。但其非abstract的子

spring bean的的使用場景和在bean注入(不看後悔,一看必懂)

為什麼用單例或者多例?何時用? 之所以用單例,是因為沒必要每個請求都新建一個物件,這樣子既浪費CPU又浪費記憶體; 之所以用多例,是為了防止併發問題;即一個請求改變了物件的狀態,此時物件又處理另一個請求,而之前請求對物件狀態的改變導致了物件對另一個請求做了錯誤的處理;  

Java物件不會被GC回收

hotspot虛擬機器的垃圾收集演算法使用根搜尋演算法。這個演算法的基本思路是:對任何“活”的物件,一定能最終追溯到其存活在堆疊或靜態儲存區之中的引用。通過一系列名為根(GC Roots)的引用作為起點,從這些根開始搜尋,經過一系列的路徑,如果可以到達java堆中的物件,那麼這個物件就是

java模式

單例模式屬於設計模式中的一種,使用單例模式的類允許只存在一個物件例項。在java開發中,有好多種不同單例模式的寫法,而且運用的場景也各不相同,因此在java面試中屬於高頻考點,面試官會讓面試者手寫單例模式程式碼,所以提醒大家特別注意下。 這裡我就記錄下常見的幾種單例模式寫法:

spring的坑

此處僅是問題的簡單描述,並沒有按照規範整理,請大家諒解,這是我在遇到這樣問題時,隨手按照自己的想法記錄下了自己的心得,看著有些亂,不過全是乾貨,希望諒解; //在springboot 整合rabbitmq下  rabbitTemplate 預設是單例形式 如果僅是傳送佇

spring詳解。如何在呼叫物件

spring生成物件預設是單例的。通過scope屬性可以更改為多例。 <bean id="user" class="modle.User" scope="prototype"> </bean> 在使用Spring3對控制器Controller進行bean管理時,如果要對控制器是