多线程-单例模式与多线程

单例模式多线程安全 设计模式之单例模式 单例模式就是说系统中对于某类的只能有一个对象,不可能出来第二个。 单例模式也是23中设计模式中在面试时少数几个会要求写代码的模式之一。主要考察的是多线程下面单例模式的线程安全性问题。 1.多线程安全单例模式实例一(不使用同步锁) public class Singleton { private static Singleton sin=new Singleton(); ... 阅读详情
前言

单例模式与多线程技术的结合,会出现很多的情况,所以再多线程和单例进行结合时需要多的去考虑一些问题,其实中心只有一个就是保住使用单例模式时多线程是安全的正确的.


内容

立即加载的"饿汉式"
什么是立即加载

立即加载就是指,在使用累的时候就已经将对象创建完毕,常见的实现办法就是直接new一个新的实例
饿汉式的应用

package singletest

public class HObject(){
//立即加载方式==饿汉模式
private static HObject hObject = new HObject();
private HObject(){
} 
public static HObject getInstance(){
//此代码版本为立即加载
//此版本代码的缺点是不能有其他实例的变量
//因为getinstance(方法没有同步)
//所以有可能会出现非线程安全的问题
return lObject;
}
}
package extthread;
import singletest.HObject;
public class HThread extends Thread{
@override
public void run(){
	System.out.print(HObject.getinstance().hashCode());
}
}
package singletest.run;
import extthread.HThread ;
public class Run(){
public  static void main(String[] args){
 HThread  t1 =new HThread ();
 HThread  t2 =new HThread ();
 HThread  t3 =new HThread ();
t1.start();
t2.start();
t3.start();
}
}

延迟加载的"懒汉式"

什么是延迟加载

延迟加载就是在调用get()方法时实力才被创建,常见的实现办法就是在get方法中进行实例化,

懒汉式解析

package singletest;
public class LObject(){
//延迟加载==懒汉模式
private static LObject lObject = new LObject();
private LObject (){
} 
public static LObject getInstance(){
try{
//此代码版本为延迟加载
if ( lObject !=null){
}else{
Thread.sleep(3000);
 lObject=new LObject();
}}catch(Interrupt额Exception e ){
e.printStackTrace();

}
return lObject;
}
}
package extthread;
import singletest.LObject;
public class LThread extends Thread{
@override
public void run(){
	System.out.print(LObject.getinstance().hashCode());
}
}
package singletest.run;
import extthread.LObject;
public class Run(){
public  static void main(String[] args){
 LThread t1 =new LThread();
 LThread t2=new LThread();
 LThread t3=new LThread();
t1.start();
t2.start();
t3.start();
}
}

懒汉式缺点

	在前面延迟加载的懒汉模式代码是错误的,根本不能实现保持单例的状态,会创建出多例模式

懒汉式解决方案

package singletest;
public class LObject(){
//延迟加载==懒汉模式
private volatile static LObject lObject ;
private LObject (){
} 
public static LObject getInstance(){
try{
//此代码版本为延迟加载
if ( lObject !=null){
}else{
Thread.sleep(3000);
synchronized (LObject.class)
if(lObject== null ){
 lObject=new LObject();
}
}
}
}catch(Interrupt额Exception e ){
e.printStackTrace();

}
return lObject;
//此版本代码称之为双重检查Double -Check Locking
}
}



package extthread;
import singletest.LObject;
public class LThread extends Thread{
@override
public void run(){
	System.out.print(LObject.getinstance().hashCode());
}
}


package singletest.run;
import extthread.LObject;
public class Run(){
public  static void main(String[] args){
 LThread t1 =new LThread();
 LThread t2=new LThread();
 LThread t3=new LThread();
t1.start();
t2.start();
t3.start();
}
}

什么是延迟加载
懒汉式解析


小结

感谢您的阅读~

FC游戏Hack实战:从零开始修改游戏数据 本文以《忍者神龟3》为例,详细介绍了从零开始进行FC游戏Hack的完整实战流程。通过使用FCEUX模拟器和调试器,结合“递减法”精准定位生命值内存地址,并利用十六进制编辑器修改关键指令,最终实现“无限生命”效果。文章旨在引导读者理解游戏数据修改的核心原理与操作技巧,重温经典的同时深入计算机程序运行机制。 阅读详情

相关推荐

Qt C++:跨平台开发利器

摘要: Qt C++是基于C++的跨平台开发框架,通过元对象系统、信号槽机制及模块化架构实现"一次编写,多端部署"。核心特性包括: 跨平台能力:覆盖桌面(Windows/macOS/Linux)、移动端(iOS/Android)、嵌入式及WebAssembly; 信号与槽:替代传统回调,实现对象间高效通信; UI组件库:200+预制组件支持QSS样式定制; 工具链:Qt Creator集成开发环境提供可视化设计、调试及多平台编译。 广泛应用于工业控制、车载系统、医疗设备及跨平台应用开发,

2202_75382767的博客 1681

网络编程-经典书籍

[新的博客地址](shankusu.me) http://shashanzhao.com/archives/971.html 首先要说讲述计算机网络和TCP/IP的书很多。 先要学习网络知识才谈得上编程 讲述计算机网络的最经典的当属Andrew S.Tanenbaum的《计算机网络》第五版,这本书难易适中。 《计算机网络(第5版)》是国内外使用最广泛、最权威的计算机网络经典教材。 目前已经是第五版,本书作者80年代就开发出MINIX,是一个用于操作系统教学的类UNIX(的小型操作系统。而Linux就是受其影

m0_67402236的博客 665

python123题目——个税计算器

类型:简单分支。

m0_62488776的博客 5802

多线程应用——单例模式

单例模式(Singleton Pattern)顾名思义,在程序中一个类只有一个对象实例。例如我们在JDBC编程中,我们创建了一个简单类DataSource,只要从DataSource中获取数据库连接即可,不用创建多个DataSource对象。单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供了一个全局访问点来访问该实例。

WangSir 2382

HC-SR04测距不准?STM32F103定时器捕获模式详解与精度提升实战

本文详细解析了HC-SR04超声波测距模块在STM32F103上的精度问题,并提供了定时器输入捕获模式的实战配置方法。通过硬件级时间测量和温度补偿算法,将测距精度提升至±0.1cm,适用于工业级应用场景。文章包含完整的代码实现和测试对比数据,帮助开发者解决超声波测距不准的常见问题。

weixin_30313409的博客 351

2025软考信息安全工程师真题

2025信息安全工程师软考真题

qq_40424393的博客 1706

多线程--单例模式

多线程--单例模式详解

m0_58430482的博客 2266

【软件系统架构】系列六:MBSE(基于模型的系统工程)

基于模型的系统工程(MBSE)是一种以模型为核心的系统工程方法论,通过结构化、可视化的模型取代传统文档,实现从需求到验证的全生命周期管理。MBSE采用SysML建模语言,包含需求、功能、架构和验证四大要素,支持自动追踪、仿真分析和代码生成。相比文档式工程,MBSE具有变更影响自动分析、跨团队协作和高可视化等优势,广泛应用于航空航天、汽车电子等领域。典型开发流程包括需求建模、行为建模、架构建模等阶段,配合MagicDraw、Cameo等工具链实现。MBSE正与数字孪生、AI技术融合,推动自动化建模和智能验证的

moton2017的博客 2783

单例模式与多线程

一、前言 如何使单例模式遇到多线程是安全的、正确的? 我们在学习设计模式的时候知道单例模式有懒汉式和饿汉式之分。简单来说,饿汉式就是在使用类的时候已经将对象创建完毕,懒汉式就是在真正调用的时候进行实例化操作。 二、饿汉式+多线程 单例: public class MyObject { //饿汉模式 private static MyObject...

一线工作者的所见、所闻...... 1万+

RTOS与Linux功能差异与应用场景全面对比

在嵌入式系统的开发中,操作系统的选择至关重要。和是两种广泛应用的操作系统,它们在功能、设计目标以及应用领域中各具优势。随着嵌入式系统的不断发展,已成为嵌入式行业的大趋势。那么,这两者到底有什么不同呢?

硬核科技 400

Linux iperf 进行跑流测试时,为啥单条流会有速率上不去的问题?

iperf

1042484520@qq.com(邮箱) 3086

【多线程】单例模式

单例模式是一种经典的设计模式它确保一个类只有一个实例,并提供一个全局访问点来获取该实例。单例模式主要用于控制对某些共享资源的访问,例如配置管理器、连接池、线程池、日志对象等。

weixin_62848751的博客 1820

Transformer时间序列预测-多变量输入-单变量输出+多变量输出,完整代码数据,可直接运行

Transformer时间序列预测-多变量输入-单变量输出+多变量输出,完整代码数据,可直接运行

9792

单例模式Singleton Pattern 在多线程下的问题

单例模式很简单,一般简单概括为如下:

u013147914的专栏 2026

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

多线程下的单例模式详解

1. 单例模式(1) 单例模式简介(2) 实现方式① 饿汉式② 懒汉式2. 多线程下的单例模式(1) Synchronized(2) 双重检查锁(3) 双重检查锁+Volatile 1. 单例模式 (1) 单例模式简介 单例模式的作用 单例模式是为了确保一个类只有一个实例,而且能自行的实例化,并向整个整个系统提供这个实例 单例模式的特点 单例类只能有一个实例。 单例类必须自己创建自己的唯一实例。 单例类必须给所有其他对象提供这一实例。 单例模式的使用场景 整个程序的运行中只允许有一个类的实例 .

qq_43564410的博客 4586

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

c# 多线程单例模式_单例模式与多线程

本章的知识点非常重要,通过单例模式与多线程技术相结合,在这个过程中能发现很多从未考虑的情况,一些不良的程序设计方法如果应用在商业项目中,将会遇到非常大的麻烦。本章的案例也将充分说明,线程与某些技术相结合时要考虑的事情有很多。如何使单例模式遇到多线程是安全的、正确的。立即加载/饿汉模式什么是立即加载?立即加载就是使用类的时候已经将对象创建完毕,常见的实现方法就是直接new实例化。而立即加载...

weixin_32176655的博客 640

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【多线程】单例模式与多线程

一、前言 如何使单例模式遇到多线程是安全的、正确的? 我们在学习设计模式的时候知道单例模式有懒汉式和饿汉式之分。简单来说,饿汉式就是在使用类的时候已经将对象创建完毕,懒汉式就是在真正调用的时候进行实例化操作。二、饿汉式+多线程 public class MyObject { //饿汉模式 private static MyObject myObjec...

柠檬树 759

多线程——单例模式

前面的几篇文章中介绍了多线程编程的基础知识,在本篇文章开始,就会利用前面的多线程编程知识来编写一些代码案例,从而使大家可以更好的理解运用多线程来编写程序,本篇文章会用多线程来实现设计模式中的“单例模式”,这里实现“单例模式”的方式主要介绍两种:“饿汉模式”和“懒汉模式”,下面进行本篇文章的重点内容吧。

HKJ_numb1的博客 1539

多线程安全单例模式

什么是单例模式?   在文章开始之前我们还是有必要介绍一下什么是单例模式。单例模式是为确保一个类只有一个实例,并为整个系统提供一个全局访问点的一种模式方法。 从概念中体现出了单例的一些特点: (1)、在任何情况下,单例类永远只有一个实例存在 (2)、单例需要有能力为整个系统提供这一唯一实例 1. 全局变量的缺点:   必须在程序一开始就创建好对象,如果程序在这次的执行过程中又一直没用到它,就非...

ForFuture 1073

c++ 单例模式与多线程

单例模式   单例模式的概念比较简单,即某一类只能创建一个对象,这样设计类的方式就是单例模式。   在直接看代码之前,可以稍微思考一下这个单例模式大概会是个什么情况。   在C++中,调用一次构造函数就会创建一个对象,这个机制是货真价实的,因此也可以推测出,单例模式某种程度上实现了构造函数的“隐藏”。   构造函数怎么藏这个具体想不到,不过大致能想出来一个点,应该将构造函数放在private区域内,令其属于类的私有成员,这样在对象中(类的区域之外)就不能直接调用构造函数了。如果不这样做,构造函数天天露在外面

师范大学生的博客 2707

Java多线程技术五——单例模式与多线程-备份

本章的知识点非常重要。在单例模式与多线程技术相结合的过程中,我们能发现很多以前从未考虑过的问题。这些不良的程序设计如果应用在商业项目中将会带来非常大的麻烦。本章的案例也充分说明,线程与某些技术相结合中,我们要考虑的事情会更多。在学习本章的过程中,我们只需要考虑一件事情,那就是:如果使单例模式与多线程结合时是安全、正确的。

geminigoth的博客 1439

c# 多线程单例模式_C# 多线程下的单例模式

在上一篇博客中(https://www.cnblogs.com/t140603/p/10318228.html)提到的第二个单例模式的实例为:public class SingLetonClass{//定义一个用于保存静态变量的实例private static SingLetonClass instance = null;//定义一个保证线程同步的标识private static readonly...

weixin_39534873的博客 116

Java多线程:单例模式

单例模式

子夜的个人博客 1322

你所不知道的单例模式和多线程并发在单例模式中的影响

本博客是根据一篇博客修改的。因为原文博客对于菜鸟不是很易理解,所以在这里加了点东西单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。这样的模式有几个好处:1、某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。2、省去了new操作符,降低了系统内存的使用频率,减轻GC压力。3、有些类如交易所的核心交易引擎,控制着交

a_lonely_dancer的博客 1万+
上一篇: [Java]类加载与反射
下一篇: [java]多线程-synchronized与volatile
刘佳欢--hannah
博客等级 码龄11年 82粉丝 138原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值