Java編程中的單例模式

在Java中實現單例模式有幾種方式,但最常見的是懶漢式和餓漢式。我們先來看一個簡單的懶漢式實現:

public class Singleton {private static Singleton instance;private Singleton() {}  // 構造方法私有化,防止外部實例化public static Singleton getInstance() {if (instance == null) {instance = new Singleton();}return instance;}
}

這種方式的特點是在第一次調用getInstance()方法時才會創建實例,實現了懶加載。但是,這種方式在多線程環境中可能會創建多個實例,因此不是線程安全的。

為了解決這個問題,我們可以使用雙重檢查鎖定(DCL):

public class Singleton {private volatile static Singleton instance;private Singleton() {}  // 構造方法私有化,防止外部實例化public static Singleton getInstance() {if (instance == null) {synchronized (Singleton.class) {if (instance == null) {instance = new Singleton();}}}return instance;}
}

這里使用了volatile關鍵字確保多線程環境下的可見性,同時通過兩次檢查instance的值來保證只創建一個實例。

除了懶漢式,還有餓漢式實現,它在類加載時就完成了實例化,因此天生是線程安全的:

public class Singleton {private static final Singleton instance = new Singleton();private Singleton() {}  // 構造方法私有化,防止外部實例化public static Singleton getInstance() {return instance;}
}

餓漢式的優點是簡單且線程安全,但如果該實例占用資源較多,而應用中實際并未使用到,就會造成資源的浪費。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/86273.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/86273.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/86273.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

原生微信小程序網絡請求與上傳接口封裝實戰指南

本文基于微信小程序原生 API,封裝 request 和 uploadFile 接口,最終實現統一請求管理、請求攔截、錯誤處理等能力。 📦 一、為什么要封裝網絡請求? 微信小程序提供了 wx.request 和 wx.uploadFile 原生 API,但直接使用…

軟件測試基礎知識詳解

🍅 點擊文末小卡片 ,免費獲取軟件測試全套資料,資料在手,漲薪更快 1、軟件測試定義 軟件測試是指在規定的條件下對程序進行操作,以發現程序錯誤,衡量軟件質量,并對其是否能滿足設計要求進行…

Spring Boot 文件上傳大小配置錯誤解決方案

問題描述 在Spring Boot應用中出現以下錯誤: Failed to bind properties under spring.servlet.multipart.max-file-size’ to org.springframework.util.unit.Datasize Property:spring.servlet.multipart.max-file-sizeValue: 10Mb Origin: URL [file:./applicat…

Matplotlib繪制矩陣圖,plt.matshow/imshow 與 ax.pcolor(pcolormesh)方法的使用

文章目錄 plt.matshow離散colorbar連續colorbar ax.pcolor簡單應用綜合應用 import matplotlib.pyplot as plt import numpy as np from matplotlib.colors import ListedColormap#data np.random.seed(42) data np.random.rand(4, 4)plt.matshow 可以把下面的matshow換成ims…

關于 ARM64 匯編:調用流程與棧幀結構解析

一、ARM64 函數調用分析(匯編級) 寄存器規則(AArch64 ABI) 用途寄存器參數傳遞x0 ~ x7返回值x0(最多兩個:x0、x1)棧指針sp鏈接寄存器x30(lr)幀指針x29(fp&a…

Kafka vs RabbitMQ vs Redis:消息中間件全面對比與選型指南

Kafka vs RabbitMQ vs Redis:消息中間件全面對比與選型指南 一、各中間件消息流轉全過程Kafka 消息流轉全過程(含機制詳解)1. 核心組件2. 流程詳解 RabbitMQ 消息流轉全過程(含機制詳解)1. 核心組件2. 流程詳解 Redis …

【代碼級指南】從Zero-shot到Chain-of-Thought:Prompt工程全棧技術解析?

本文較長,建議點贊收藏,以免遺失。 從理論到實踐,掌握Zero-shot/Few-shot Prompt設計精髓。 一、Prompt Engineering 核心概念圖解 Prompt Engineering 三大支柱 二、Prompt 設計基礎框架 1. Prompt 核心四要素 prompt_template "&q…

sizeof()函數無法計算形參指針指向的字符串大小

給定的代碼中&#xff0c;func() 函數打印的 name_len 是 指針的大小&#xff0c;而不是字符串的長度。具體原因如下&#xff1a; 代碼分析 #include <stdio.h> #include <string.h>void func(char *name) {printf("name_len:%d", sizeof(name)); // 打…

Python打卡:Day37

知識點回顧&#xff1a; 過擬合的判斷&#xff1a;測試集和訓練集同步打印指標模型的保存和加載 僅保存權重保存權重和模型保存全部信息checkpoint&#xff0c;還包含訓練狀態 早停策略 浙大疏錦行

Android 9.0(API 28)后字重設置

在 Android 應用中設置字體字重&#xff08;Font Weight&#xff09;可以通過多種方式實現&#xff0c;下面詳細介紹各種方法及其適用場景。 1. 使用 XML 屬性設置字重 1.1 基本字重設置&#xff08;API 1&#xff09; <TextViewandroid:layout_width"wrap_content&…

WebRTC(十):RTP和SRTP

RTP&#xff08;Real-time Transport Protocol&#xff09; 作用 RTP 用于傳輸實時媒體流&#xff08;如音頻、視頻&#xff09;&#xff0c;它不提供可靠傳輸&#xff0c;而是關注低延遲、高實時性。 報文結構 整體結構 RTP 報文由以下部分組成&#xff1a; RTP Header …

微服務架構下面臨的安全、合規審計挑戰

微服務架構在帶來敏捷性、可擴展性等優勢的同時&#xff0c;也給安全和合規審計帶來了巨大的挑戰。這些挑戰主要源于微服務的 分布式特性、動態性以及數量龐大 等特點。 以下是微服務架構下安全和合規審計面臨的具體挑戰 一、安全審計挑戰 1. 攻擊面擴大和復雜性增加 服務數…

顯卡等驅動程序的介紹與安裝

文章目錄 1. 什么是驅動程序2. 電腦的驅動程序有哪些3. 電腦的驅動程序的安裝4. 獨立顯卡驅動程序的安裝5. 現代化驅動程序的安裝6. 驅動程序既然這么重要&#xff0c;為什么我不都下一遍呢&#xff1f; 1. 什么是驅動程序 假設我們現在成功組裝了一臺臺式機&#xff0c;那我們…

【Python】高光譜數據分析

特征提取 import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn.cross_decomposition import PLSRegression from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LinearRegression# 設置matplotlib支持中文…

nt!CcGetVirtualAddressIfMapped函數中的nt!CcGetVacbLargeOffset函數分析--重要

第一部分&#xff1a; 1: kd> kc # 00 nt!CcGetVirtualAddressIfMapped 01 nt!CcFlushCache 02 Ntfs!LfsFlushLfcb 03 Ntfs!LfsFlushToLsnPriv 04 Ntfs!LfsWriteLfsRestart 05 Ntfs!LfsWriteRestartArea 06 Ntfs!NtfsCheckpointVolume 07 Ntfs!NtfsCheckpointAllVolumes 0…

K8s入門指南:架構解析濃縮版與服務間調用實戰演示

目錄 前言一、k8s概念理解1、k8s整體架構&#xff08;1&#xff09; Master 主節點&#xff08;2&#xff09; Node 工作節點&#xff08;3&#xff09; Etcd 鍵值存儲數據庫 &#xff12;、Pod被視為最小的部署單元&#xff13;、k8s的五種控制器類型&#xff08;1&#xff09…

【ubuntu下小工具】Crontab定時任務進行數據備份和清理

背景 在生產環境的深度學習項目中&#xff0c;系統每日會持續生成大量數據。如果不進行有效管理&#xff0c;隨著時間的推移&#xff0c;磁盤空間將被占滿&#xff0c;最終導致服務器癱瘓。 為解決這一問題&#xff0c;需設置一個定時任務去執行腳本&#xff0c;用以完成&#…

3dgs涉及的基本概念:球諧系數(SH 系數)等

1.球諧系數&#xff08;SH 系數&#xff09; ──────────────────────────────────────── 1.1 什么是球諧函數 (Spherical Harmonics&#xff0c;縮寫為 SH) 球諧函數是一組定義在單位球面上的一組正交函數&#xff0c;類似于在二維平…

sql格式化自動識別SQL語法結構

一、安裝包 PoorMansTSqlFormatterLib 二、代碼實現 using Microsoft.AspNetCore.Mvc; using PoorMansTSqlFormatterLib.Formatters; using PoorMansTSqlFormatterLib.Parsers; using PoorMansTSqlFormatterLib.Tokenizers;namespace SaaS.OfficialWebSite.Web.Controllers …

LVS-DR負載均衡群集深度實踐:高性能架構設計與排障指南

目錄 一、核心原理與理論 二、背景與架構設計 三、全流程部署步驟 1. NFS共享存儲配置&#xff08;192.168.7.100&#xff09; 2. Real Server節點配置&#xff08;四臺服務器&#xff09; 3. Director服務器配置 四、常見問題解決方案 五、生產環境總結 拓撲示意圖&am…