日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java单例模式_Java描述设计模式(01):单例模式

發布時間:2024/10/14 java 71 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java单例模式_Java描述设计模式(01):单例模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文源碼:GitHub·點這里 || GitEE·點這里

一、單例模式

1、概念圖解

單例設計模式定義:確保這個類只有一個實例,并且自動的實例化向系統提供這個對象。

2、樣例代碼

package Singleton稱為單例類,構造函數使用private修飾,確保系統中只能產生一個實例,并且自動生成的。上面代碼也就是所謂的懶漢式加載:只有到使用該對象的時候才來創建,意思餓了才來做飯吃。

二、線程安全問題

在上面的代碼中存在一個很明顯的線程安全問題,當有多條線程來請求對象實例的時候,因為對象的創建是需要時間的,假設A線程進來判斷singleton == null,就會進入對象的創建過程,這時如果同時在過來幾條線程,那么他們都會得到一個對象實例,這個就是所謂的線程安全問題。

1、同步控制方式

package

這樣操作會影響系統性能

2、餓漢式加載

public

這里先把對象創建出來,有需要直接使用;

3、雙重檢查

public

4、枚舉方式

package

三、延遲類初始化

1、基礎概念

1)、類級內部類

簡單點說,類級內部類指的是,有static修飾的成員式內部類。如果沒有static修飾的成員式內部類被稱為對象級內部類。
類級內部類相當于其外部類的static成分,它的對象與外部類對象間不存在依賴關系,因此可直接創建。而對象級內部類的實例,是綁定在外部對象實例中的。
類級內部類中,可以定義靜態的方法。在靜態方法中只能夠引用外部類中的靜態成員方法或者成員變量。
類級內部類相當于其外部類的成員,只有在第一次被使用的時候才被會裝載。

2)、多線程缺省同步鎖

在多線程開發中,為了解決并發問題,主要是通過使用synchronized來加互斥鎖進行同步控制。但是在某些情況中,JVM已經隱含地執行了同步,這些情況下就不用自己再來進行同步控制了。這些情況包括:1.由靜態初始化器(在靜態字段上或static{}塊中的初始化器)初始化數據時 2.訪問final字段時 3.在創建線程之前創建對象時 4.線程可以看見它將要處理的對象時

2、實現方式

要想很簡單地實現線程安全,可以采用靜態初始化器的方式,它可以由JVM來保證線程的安全性。比如前面的餓漢式實現方式,在類裝載的時候就初始化對象,不管是否需要,存在一定的空間浪費。
一種可行的方式就是采用類級內部類,在這個類級內部類里面去創建對象實例。這樣一來,只要不使用到這個類級內部類,那就不會創建對象實例,從而同時實現延遲加載和線程安全。public

四、JDK源碼單例模式

Runtime單例實現源碼。

1、案例演示

/**

2、源代碼分析

public

基于餓漢模式實現的單例模式。

五、Spring框架中應用

1、創建測試類

public

2、Spring配置文件

<!-- 單例Bean -->

3、測試讀取Bean對象

package

結論

Spring單例模式與純粹的單例設計模式的主要區別

盡管使用相同的類加載器來加載兩個應用程序上下文,但是UserBean的實例是不一樣的。也就是Spring框架中的單例對象是基于應用程序中。

六、單例模式總結

1、注意事項

單例模式注意事項和細節說明

1) 單例模式保證了 系統內存中該類只存在一個對象,節省了系統資源,對于一些需要頻繁創建銷毀的對象,使用單例模式可以提高系統性能。
2) 當想實例化一個單例類的時候,必須要記住使用相應的獲取對象的方法,而不是使用new Object() 的方式。
3) 單例模式使用的場景:需要頻繁的進行創建和銷毀的對象、創建對象時耗時過多或耗費資源過多(即:重量級對象),但又經常用到的對象。

2、優缺點

優點: 1、單例模式只會創建一個對象實例,減少內存消耗 2、設置全局訪問點,優化共享資源的訪問 缺點: 1、沒有接口,很難擴展 2、不利于測試 3、與單一職責原則沖突

七、源代碼地址

GitHub·地址 https://github.com/cicadasmile/model-arithmetic-parent GitEE·地址 https://gitee.com/cicadasmile/model-arithmetic-parent

總結

以上是生活随笔為你收集整理的java单例模式_Java描述设计模式(01):单例模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。