1. 程式人生 > >java 多執行緒 單例模式

java 多執行緒 單例模式

單例模式:

單例模式是指在程式執行過程中,某個類在記憶體中只有一個物件,即讓一個類只能建立一個物件,所以單例模式不能用new關鍵字建立

單例模式一般分為兩種情況,餓漢式和懶漢式

建立單例模式的步驟:

1構造方法私有化private,保證外部訪問不到構造方法,否則可以建立無限多個物件,私有化構造方法後系統不再提供預設的構造方法

2建立私有的private靜態的static  當前物件類物件(餓漢式)/可見的volitale當前類物件的引用(懶漢式或延時載入)

3對外提供公共的public靜態的static訪問方法,將單例物件暴漏給外部,讓外部能訪問到單例類的物件

注意:2中成員變數要是私有的靜態的,如果不是靜態的,3中的靜態方法訪問不到這個成員變數.

3中的公共方法必須要是靜態的,才可以通過類名.方法名的方式呼叫該方法

為了防止多執行緒呼叫懶漢式建立多個物件,懶漢式的訪問方法要設定成同步的synchronized

建立示例:

package chen_chapter_9;

public class SingleTest01 {
	public static void main(String[] args) {
		Single s1 = Single.getInstance();
		Single s2 = Single.getInstance();
		System.out.println(s1 == s2);

		Slone s3 = Slone.getInstance();
		Slone s4 = Slone.getInstance();
		System.out.println(s3 == s4);
	}

}
//懶漢式
class Single {
	// 1私有化構造方法
	private Single() {
	}

	// 2建立當前單例類物件,因為是餓漢,所以先建立物件,為了不被外部訪問,要私有化,且靜態
	private static Single s = new Single();

	// 3提供給外部能訪問的方法,返回該單例模式的物件,因為只能通過類名.方法的方式訪問該方法,所以該方法要是靜態的
	public static Single getInstance() {
		return s;
	}
}


//餓漢式
class Slone {
	// 1私有化構造方法
	private Slone() {
	}

	// 2建立單例類的引用,不能直接被外面訪問,用private,對多執行緒可見,要用volitale關鍵字
	private static volatile Slone slone = null;

	// 3提供公共方法,以返回該單例物件
	public static synchronized Slone getInstance() {
		if (slone == null) {
			slone = new Slone();
		}
		return slone;
	}
}
out:
true
true兩個物件的記憶體地址相同,說明是同一個物件

java示例:

java原始碼提供了一個Runtime類,這個類是一個單例模式,檢視部分原始碼:

public class Runtime {
    private static final Runtime currentRuntime = new Runtime();

    public static Runtime getRuntime() {
        return currentRuntime;
    }

    /** Don't let anyone else instantiate this class */不能被任何人例項化
    private Runtime() {}
//該函式可以執行windows的一些命令如畫圖mspaint,關機shutdown, logoff登出命令,
//notepad——–開啟記事本,dvdplay——–DVD播放器等
    public Process exec(String command) throws IOException {
        return exec(command, null, null);
    }

使用exec示例:

import java.io.IOException;

public class RuntimeTest01 {
	public static void main(String[] args) {
		Runtime rt = Runtime.getRuntime();
		try {
			rt.exec(" explorer");//開啟檔案瀏覽器
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

相關推薦

Java執行-----模式執行中的使用用問題

   1.餓漢模式(立即載入模式)與多執行緒 不管需不需要用到例項都要去建立例項,即在類產生的時候就建立好例項 package com.thread; /** * 餓漢模式 * * @author yyx 2018年12月28日 */ public cl

Java執行--模式的五種實現

一、惡漢模式 在這個類還沒有使用到的時候就已經建立好了 public class Singleton{ /** *類變數在類準備階段就初始化了然後放在<clinit>構造方法中, *一旦外部呼叫了靜態方法

java 執行 模式

單例模式: 單例模式是指在程式執行過程中,某個類在記憶體中只有一個物件,即讓一個類只能建立一個物件,所以單例模式不能用new關鍵字建立 單例模式一般分為兩種情況,餓漢式和懶漢式 建立單例模式的步驟: 1構造方法私有化private,保證外部訪問不到構造方法,否則可以建

解決執行模式執行不安全問題

DCL雙檢查鎖機制 public class MyConfig { private volatile static MyConfig myConfig = null;//volatile

c++模式[2]--Meyers方式--執行

[1]單例模式中最大的缺陷就是執行緒安全與判斷的開銷 #pragma once #include <iostream> #include <thread> using names

java執行Master-worker模式

Master-Worker模式是常用的平行計算模式。它的核心思想是系統由兩類程序協作工作:Master程序和Worker程序。Master負責接收和分配任務,Worker負責處理子任務。當各個Worker子程序處理完成後,會將結果返回給Master,由Master做歸納和總結。其好處是能將一個大任務

Java執行-生產者消費者模式

問題描述 有一群生產者程序在生產產品,並將這些產品提供給消費者程序去消費。為使生產者程序與消費者程序能併發執行,在兩者之間設定了一個具有n個緩衝區的緩衝池,生產者程序將它所產生的產品放入緩衝區中,消費者程序可以從一個緩衝區中取走產品去消費。儘管所有的生產者和消費

java執行系列之模式|第一篇-Guarded Suspension pattern

Guarded Suspension pattern模式 作者注:該系列文章基於《java執行緒設計模式》撰寫,只用於學習和交流。 定義:多執行緒執行,當前執行緒沒有達到警戒條件時,執行緒會進入等待直到

java執行系列之模式|第三篇: Producer-Consumer pattern

生產者-消費者模式 含義:顧名思義,生產者用來生產資料,可能有一到多個,消費者用來消費資料,也可能有多個,中間會有一個“橋樑參與者”,作為資料的存放以及執行緒之間的同步和協調。 範例程式行為: 廚師(MakerThread)做蛋糕,做好後放在桌子(Table)上 桌子

執行下單模式:懶載入(延遲載入)和即時載入

前言 在開發中,如果某個例項的建立需要消耗很多系統資源,那麼我們通常會使用惰性載入機制,也就是說只有當使用到這個例項的時候才會建立這個例項,這個好處在單例模式中得到了廣泛應用。這個機制在single-threaded環境下的實現非常簡單,然而在multi-t

java執行之Future模式使用

Future模式簡述 傳統單執行緒環境下,呼叫函式是同步的,必須等待程式返回結果後,才可進行其他處理。 Futrue模式下,呼叫方式改為非同步。 Futrue模式的核心在於:充分利用主函式中的等待

Java 執行程式設計設計模式之 Thread Pool(執行池)

Java 中建立一個執行緒往往意味著JVM 會建立相應依賴於宿主機作業系統的本地執行緒(Native Thread)。 Thread Pool 模式的本質是使用極其有限的資源去處理相對無限的任務。核心思想是使用佇列對待處理的任務進行快取,並複用一定數量的工作者

JAVA執行之Future模式

Future模式有點類似於商品訂單。比如在網購時,當看中某一個商品時,就可以提交訂單,當訂單處理完成後,在家裡等待商品送貨上門即可。或者說更形象的我們傳送Ajax請求的時候,頁面是非同步的進行後臺處理,使用者無需一直等待請求的結果,可繼續瀏覽或操作其他內容。下面看一個例子:1

Java 執行(四)—— 模式

這篇部落格介紹執行緒安全的應用——單例模式。 單例模式   單例模式,是一種常用的軟體設計模式。在它的核心結構中只包含一個被稱為單例的特殊類。通過單例模式可以保證系統中,應用該模式的類一個類只有一個例項。即一個類只有一個物件例項。 例項: /** * @author

Java執行學習筆記21之模式執行

詳細程式碼見:github程式碼地址   第六章 單例模式與多執行緒 前言: 我之前已經開設了23個設計模式這個專欄,介紹了很多的Java設計模式,其中一些模式對於絕 大多數程式語言設計思想都是類似的,需要了解單例模式的可以去看看。 我們在實際開發中經常用到單例模式,但

Java——執行基本使用(三) 餓漢式和懶漢式的設計模式執行之間的通訊

這一則部落格主要寫的是單例設計模式,與實現多執行緒之間的通訊等等~ 1.單例設計模式:保證類在記憶體中只有一個物件 2.保證類在記憶體中只有一個物件            &

java執行學習(十一) 常見的模式執行安全性分析

類初始化鎖  怎麼理解? 為什麼需要了解? 常見的單例模式分析 懶漢式 為什麼執行緒不安全 驗證 餓漢式 為什麼執行緒安全 雙重檢查鎖定方式 演變由來 為什麼執行緒不安全 如何解決執行緒不安全 靜態類方式 為什麼執行緒安全 結

Java執行核心技術(五)模式執行

本文只需要考慮一件事:如何使單例模式遇到多執行緒是安全的、正確的 1.立即載入 / "餓漢模式" 什麼是立即載入?立即載入就是使用類的時候已經將物件建立完畢,常見的實現辦法就是直接 new 例項化。 public class MyObject { private static MyObject m

Java 執行下,2種安全、效能靠譜的模式

懶漢式-雙重核驗: package com.zzf.concurrence.singleinstance; /** * 懶漢式-雙重核驗 * @author zzf * */ public class SingleEHan { private Single

Java執行程式設計筆記10:模式

立即載入:“餓漢模式” 立即載入就是指使用類的時候已經將物件建立完畢,常見的實現方法就是直接new例項化。也就是在呼叫方法前,例項就被建立了。示例程式碼如下所示: class MyObject { private static MyObject myObject=new MyObject();