《java多線程編程核心技術》之單例模式

2020-12-16 老孟IT讀書筆記

相關概念

立即加載/餓漢模式使用類的時候已將對象創建完畢,常見的實現辦法就是直接new實例化

private static MyObject myObject = new MyObject();

public static MyObject getInstance() {

//沒有synchronized,可能出現非線程安全問題

return myObject

}

延遲加載/懶漢模式什麼時候用什麼時候創建

private static MyObject myObject;

public static MyObject getInstance() {

//沒有synchronized,可能創建N個對象

if (myObject == null)

myObject = new MyObject();

return myObject;

}

多線程下的單例解決方案

懶漢模式 聲明getInstance()方法synchronized缺點:效率低下

懶漢模式 DCL雙檢查鎖private volatile static MyObject myObject;

public static MyObject getInstance() {

try{

if (myObject != null){

} else {

//模擬一些耗時的準備工作

Thread.sleep(3000);

synchronized(MyObject.class) {

if (myObject == null) {

myObject = new MyObject();

}

}

}

} catch (InterruptedException e){

e.printStackTrace();

}

return myObject;

}

靜態內置類public class MyObject {

private static class MyObjectHandler {

private static MyObject myObject = new MyObject();

}

private MyObject();

public static MyObject getInstance() {

return MyObjectHandler.myObject;

}

}

註:反序列化時使用(實現)Serializable.readResolve()方法,它將不「複製」新對象而遵循單例規則

靜態代碼塊private static MyObject instance = null;

static {

instance = new MyObject();

}

enum枚舉類型與靜態代碼塊相似,在使用枚舉類時,構造方法會被自動調用

public enum MyObject {

private Connection connection;

private MyObject() {

//...

connection = .....;

}

public Connection getConnection() {

return connection;

}

}

相關焦點

  • Java的單例模式
    一、什麼是單例模式?
  • 高並發下線程安全的單例模式(最全最經典,值得收藏)
    在所有的設計模式中,單例模式是我們在項目開發中最為常見的設計模式之一,而單例模式有很多種實現方式,你是否都了解呢?高並發下如何保證單例模式的線程安全性呢?如何保證序列化後的單例對象在反序列化後任然是單例的呢?這些問題在看了本文之後都會一一的告訴你答案,趕快來閱讀吧!什麼是單例模式?
  • Java單例模式深入詳解
    第一個代碼不是單例模式,也就是說不一定只要構造方法是private的就是單例模式。java中單例模式是一種常見的設計模式,單例模式分三種:懶漢式單例、餓漢式單例、登記式單例三種。這種方式極大地簡化了在複雜環境 下,尤其是多線程環境下的配置管理,但是隨著應用場景的不同,也可能帶來一些同步問題。三.典型例題首先看一個經典的單例實現。
  • Java核心技術精講PDF掃描版下載
    《Java核心技術精講》內容包括Java簡介、Java基礎語法、面向對象、異常的捕獲及處理、包及訪問控制權限、Java新特性、多線程、常用類庫、JavaIO操作、網絡編程、類集框架、Java資料庫編程、DAO設計模式、Eclipse開發工具。
  • 你真的理解了java單例模式嗎?講別人都忽略的細節
    前言:老劉這篇文章敢做保證,java的單例模式講的比大多數的技術博客都要好,講述別人技術博客都沒有的細節!!!1 java單例模式直接講實現單例模式的兩種方法:懶漢式和餓漢式,單例模式的概念自己上網搜吧這裡就不講了!
  • 新手編程:Java多線程中Thread與Runnable的區別
    Java多線程中Thread與Runnable的區別定義extends Thread子類繼承Thread具備多線程能力,可以實現多線程;啟動線程的方法:①創建子類對象 ②對象名.start();不建議使用:避免多線程OOP單繼承的局限性(OOP:Object Oriented Programming,面向對象的編程、類似的還有OOD
  • java設計模式中的單例模式,收藏起來慢慢看!
    在java中,單例模式算是比較基礎和簡單的,今天就來簡單聊聊什麼是單例模式。比如說,一個應用程式中,某個類的實例對象只有一個,而我們沒有辦法new,因為構造器已經被private聲明了,通過getInstance()的方法可以獲取它們的實例。
  • Android設計模式(1)——單例模式
    單例模式的UML類圖 實現單例模式主要有如下幾個關鍵點:構造函數不對外開放,一般為Private通過一個靜態方法或者枚舉返回單例對象確保單例類的對象有且只有一個,尤其在多線程環境下確保單例對象在反序列化時不會重新構建對象示例示例類圖:  示例實現代碼//普通員工類public class Staff
  • 實現多線程的標準操作,基於Runnable接口實現java多線程
    1 為什麼要用Runnable上一篇文章介紹了通過繼承Thread類,實現java多線程。但如果當我們創建的這個線程類還想繼承其他類的時候,這種方法就略顯局限了。這也是java單繼承的局限性。為了避免這種局限性,所以又提供了第二種多線程主體定義的形式:實現Runnable接口。
  • 手寫單例模式
    手寫單例模式為什麼要有單例模式: 在編程中,有些場景,是這樣的:
  • Java創建線程安全的單例singleton
    Spring 中的Bean,默認也是單例的,共享資源的訪問,比如日誌文件,系統配置單例的實現要實現一個單例,首先要把構造方法設置成私有的,並且要提供一個返回實例的方法1、實現一個單例,單線程是安全的,多線程中不安全,代碼如下:
  • 40個Java多線程問題總結
    假設有一個大的任務A,單線程編程,那麼就要考慮很多,建立整個程序模型比較麻煩。但是如果把這個大的任務A分解成幾個小任務,任務B、任務C、任務D,分別建立程序模型,並通過多線程分別運行這幾個任務,那就簡單很多了。
  • 為什麼要用單例模式?
    我們在編程中最常用的模式就是單例模式了,然而單例模式都用在什麼場合?為什麼不用靜態方法而要用單例模式呢?
  • 設計模式一:單例模式
    什麼是單例模式單例模式是指系統中的某個類只能有一個對象實例。
  • Java 實現單例模式的 9 種方法
    什麼是單例模式二. 單例模式的特點三. 單例模式VS靜態類四. 單例模式的實現一. 什麼是單例模式因進程需要,有時我們只需要某個類同時保留一個對象,不希望有更多對象,此時,我們則應考慮單例模式的設計。二. 單例模式的特點單例模式只能有一個實例。單例類必須創建自己的唯一實例。
  • 再見面試官:單例模式有幾種寫法?
    編程最大的樂趣在於「know everything, control everything」。「JDK版本:oracle java 1.8.0_102大體可分為4類,下面分別介紹他們的基本形式、變種及特點。飽漢模式飽漢是變種最多的單例模式。
  • java線程的基礎問題講解
    1.1並發編程的目的:並發編程是為了讓程序運行得更快,當 並不是啟動更多的線程就能讓程序最大限度地並發執行,受限於死鎖和上下文切換問題。所以上下文切換會影響線程的執行速度。join 的作用多線程一定比單線程快嗎?不一定,在測試中並發數量沒超過百萬次的時候,串行比並發速度更快,因為線程有線程的創建和上下文切換的開銷。
  • 你必須掌握的 21 個 Java 核心技術!
    JVM作為java運行的基礎,很難相信對於JVM一點都不了解的人可以把java語言吃得很透。我在面試有超過3年Java經驗的開發者的時候, JVM幾乎就是一個必問的問題了。當然JVM不是唯一決定技術能力好壞的面試問題,但是可以佐證java開發能力的高低。
  • 大數據基礎:Java多線程入門
    在大數據開發學習當中,Java基礎是非常重要的一部分,打好了Java基礎,才能在後續的大數據框架技術學習階段,也能有所主力。而Java當中的一個重要知識點,就是多線程。今天的大數據基礎分享,我們就主要來講講Java多線程入門基礎。
  • Java四大名著是什麼?java程式設計師提高技能的經典編程書籍推薦
    java編程的小夥伴有參考。學任何語言,基本的語法知識不能少,首推,Java四大名著( java編程思想+Effective java中文版+Java核心技術卷12),下面來具體介紹以下包含Java四大名著在內的java程式設計師類圖書。