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();