单例的懒汉模式为何不安全?

懒汉模式下,多线程访问时,会创建多个实例,为什么出现创建多个实例的情况就不安全了?能否举实例说明?

2个回答

不是“出现创建多个实例的情况就不安全了”,而是既然是单例模式,就不应该出现多个实例,否则还要单例干什么,任何可能违背设计者意图的方式,都是“不安全”的。

好比,氧气罩不能提供氧气是不安全的,当然对于一个不需要氧气罩的正常人来说,氧气罩不能提供氧气只是故障,而不会造成什么安全问题。只是是因为氧气罩设计作为生命支持系统的一部分,是给不能呼吸的患者使用,而它不能提供氧气,这是不安全的。

qq_39665034
qq_39665034 你说这个干什么,答非所问
一年多之前 回复
 public class LazySingleton {
    private LazySingleton(){}
    private static LazySingleton singleton;
    public static LazySingleton getInstance() {
        if (singleton == null)
            singleton =  new LazySingleton();
        return singleton;
    }
}

1.设想一下,如果第一个线程进入getInstance,此时对于他来说singleton是null,但是此时cpu调度时间到了,该到了第二个线程进来
2.第二个线程进来,此时singleton也是空的,因此就生成了一个
3.时间到了,线程1此时恢复了,对于他来讲,singleton也是空的,所以也创建了一个

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
单例模式中,懒汉式到底该不该使用双重检查锁?

很多人说因为内存什么的原因,双重检查锁可能会失效,小白实在看不太懂, 只想知道结论是什么?双重检查锁到底该不该用? 如果不该用,那单例模式更好的写法是什么? 附代码 ``` class SingleTon2 { private static SingleTon2 s2 = null; public static SingleTon2 getInstance() { if (s2 == null) { synchronized (SingleTon2.class) { if (s2 == null) { s2 = new SingleTon2(); } } } return s2; } private SingleTon2() { System.out.println("懒汉式初始化......."); } } ```

单例模式的懒汉模式的多线程问题

在单例模式的懒汉模式中,为了解决多线程的问题,使用了synchronized,那这个是不是意味着只有一个线程可以获得这个实例,那要是这个线程释放这个实例对象了,其他线程怎么知道呢?或者说Singleton类怎么知道呢? ``` public class Test2 { public static void main(String[] args) throws InterruptedException { for(int i =0;i<3;i++) { MyThread thread = new MyThread(); thread.start(); System.out.println("== 创建线程 =="); Thread.sleep(2000); } } } class MyThread extends Thread{ public void run() { Singleton singleton = Singleton.getInstance(); try { singleton = null; //将创建的对象置为null System.out.println("销毁实例对象"); Thread.sleep(2000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } ``` ``` public class Singleton { private static Singleton instance; private Singleton() { } public static synchronized Singleton getInstance() { if(instance == null) { //难道是只能执行一次?? instance = new Singleton(); System.out.println("创建singleton对象!"); } return instance; } } ```

java 单例模式 懒汉式

为什么要判断2次![图片说明](https://img-ask.csdn.net/upload/201907/22/1563773019_95033.jpg)

一个懒汉模式单例crash的问题

先贴最后崩溃的地方的代码: InterfaceManage* InterfaceManage::Instance() { static InterfaceManage ins; return &ins; } 程序运行中会出现小概率的崩溃,昨天终于通过dmp文件拿到调用栈信息,但是百思不得其解,在C++11里面这个懒汉模式的单利应该是线程安全的啊,为什么会崩溃呢?异常信息如下: 0xC0000005: 读取位置 0x0000023F0D0D0D11 时发生访问冲突。

单例模式能用volatile修饰方法吗

最近在面试时,遇到一个面试题要求写一个单例模式,我用的是懒汉式,但是没有加上同步synchronized,面试官跟这个单例在多线程有问题,要加上volatile修饰方法。我在网上搜下标准的都是拥synchronized修饰,问下如果用volatile,所有的线程可以共享单例修改对象,这样还是不是单例模式呢?实际情况是不是可以这样做,毕竟效率比synchronized高多了

Android利用单例模式更改控件的属性,无法实现的问题

# 这是MainActivity中的代码,主要是加粗部分的代码,本打算通过Button的Onclick方法,来调用单例里边的Txtchange方法,来改变TextView的text,但是就是不法实现,求大神指点 package com.example.controlproject0311; import android.app.Activity; import android.app.ActionBar; import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.widget.Button; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; import android.os.Build; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // setContentView(R.layout.activity_main); RelativeLayout mainLayout = new RelativeLayout(this); mainLayout.setId(11); setContentView(mainLayout); Button button = new Button(this); button.setId(20); button.setText("hello"); button.setTextSize(40); button.setTranslationX(50); button.setTranslationY(60); mainLayout.addView(button); final TextView txtView = new TextView(this); txtView.setText("one"); txtView.setId(12); mainLayout.addView(txtView); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // SingletonControl.getInstance().txtChange(); Singleton2.getInstance().sayhello(); ****Singleton2.getInstance().SetText(txtView.getId()); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } } ``` ``` ## 这是单例的代码 package com.example.controlproject0311; import android.app.Activity; import android.widget.TextView; public class Singleton2 extends Activity { /* 持有私有静态实例,防止被引用,此处赋值为null,目的是实现延迟加载 */ private static Singleton2 instance = null; /* 私有构造方法,防止被实例化 */ private Singleton2() { } /* 1:懒汉式,静态工程方法,创建实例 */ public static Singleton2 getInstance() { if (instance == null) { instance = new Singleton2(); } return instance; } public void sayhello() { System.out.println("are you ok"); } public void SetText(int id) { TextView textView = (TextView) findViewById(id); textView.setText("weew"); } } ``` ```

设计模式中单例模式的双重验证模式的问题

双重验证代码: /** * 双重验证懒汉模式(线程安全) * */ public class LazyAgainSingletonPattern { private static volatile LazyAgainSingletonPattern pattern; private LazyAgainSingletonPattern(){ } public static LazyAgainSingletonPattern getInstance() throws InterruptedException { if(pattern == null){ Thread.sleep(1000); synchronized (LazyAgainSingletonPattern.class){ if(pattern == null){ pattern = new LazyAgainSingletonPattern(); } } } return pattern; } } 可以改为单重验证会有什么问题呢? 如:public class LazyAgainSingletonPattern { private static volatile LazyAgainSingletonPattern pattern; private LazyAgainSingletonPattern(){ } public static LazyAgainSingletonPattern getInstance() throws InterruptedException { Thread.sleep(1000); synchronized (LazyAgainSingletonPattern.class){ if(pattern == null){ pattern = new LazyAgainSingletonPattern(); } } return pattern; } } 少了一重验证,多线程下测试时结果都一样,都是单例对象 测试代码: public class Test { public static void main(String[] args) { for(int i = 0;i < 10; i++){ new Thread(()->{ LazyAgainSingletonPattern singletonPattern = null; try { singletonPattern = LazyAgainSingletonPattern.getInstance(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(singletonPattern); }).start(); } } } 输出结果都一样,请问双重验证为什么不能改为单重验证呢

请问线程安全懒汉式单例模式能这样写么谢谢

``` class Consumer { private static Consumer consumer; private Consumer(){} public static Consumer getInstance(){ if (consumer==null) { synchronized (Consumer.class) { consumer=new Consumer(); } } return consumer; } @Override public String toString() { return super.toString(); } } public class ConsumerTest { public static void main(String[] args) { System.out.println(Consumer.getInstance()); System.out.println(Consumer.getInstance()); System.out.println(Consumer.getInstance()); } } ```

在企业开发中,一般用link的饿汉模式多还是懒汉模式多一点?

在企业开发中,一般用link的饿汉模式多还是懒汉模式多一点?

link中什么样的查询叫懒汉模式,什么查询又叫饿汉模式?

link中什么样的查询叫懒汉模式,什么查询又叫饿汉模式?

could not find the main class

初学者,学到单例模式的时候,懒汉式,饿汉式结构运行报错,程序没问题,运行其它程序没问题![图片](https://img-ask.csdn.net/upload/201611/14/1479132394_931644.jpg)

求一个图书管理系统代码

要求关键字,jdbc 数据库 懒汉式 实现,图书管理 增删改查以及一些实用功能

YOLOv3目标检测实战:训练自己的数据集

YOLOv3目标检测实战:训练自己的数据集

150讲轻松搞定Python网络爬虫

150讲轻松搞定Python网络爬虫

实用主义学Python(小白也容易上手的Python实用案例)

实用主义学Python(小白也容易上手的Python实用案例)

我说我不会算法,阿里把我挂了。

不说了,字节跳动也反手把我挂了。

立方体线框模型透视投影 (计算机图形学实验)

计算机图形学实验 立方体线框模型透视投影 的可执行文件,亲测可运行,若需报告可以联系我,期待和各位交流

2019 AI开发者大会

2019 AI开发者大会

组成原理课程设计(实现机器数的真值还原等功能)

实现机器数的真值还原(定点小数)、定点小数的单符号位补码加减运算、定点小数的补码乘法运算和浮点数的加减运算。

C/C++跨平台研发从基础到高阶实战系列套餐

一 专题从基础的C语言核心到c++ 和stl完成基础强化; 二 再到数据结构,设计模式完成专业计算机技能强化; 三 通过跨平台网络编程,linux编程,qt界面编程,mfc编程,windows编程,c++与lua联合编程来完成应用强化 四 最后通过基于ffmpeg的音视频播放器,直播推流,屏幕录像,

MFC一站式终极全套课程包

该套餐共包含从C小白到C++到MFC的全部课程,整套学下来绝对成为一名C++大牛!!!

软件测试2小时入门

软件测试2小时入门

三个项目玩转深度学习(附1G源码)

三个项目玩转深度学习(附1G源码)

计算机图形学-球的光照模型课程设计

计算机图形学-球的光照模型,有代码完美运行,有课程设计书

Linux常用命令大全(非常全!!!)

Linux常用命令大全(非常全!!!) 最近都在和Linux打交道,感觉还不错。我觉得Linux相比windows比较麻烦的就是很多东西都要用命令来控制,当然,这也是很多人喜欢linux的原因,比较短小但却功能强大。我将我了解到的命令列举一下,仅供大家参考: 系统信息 arch 显示机器的处理器架构 uname -m 显示机器的处理器架构 uname -r 显示正在使用的内核版本 d...

因为看了这些书,我大二就拿了华为Offer

四年了,四年,你知道大学这四年我怎么过的么?

深度学习原理+项目实战+算法详解+主流框架(套餐)

深度学习系列课程从深度学习基础知识点开始讲解一步步进入神经网络的世界再到卷积和递归神经网络,详解各大经典网络架构。实战部分选择当下最火爆深度学习框架PyTorch与Tensorflow/Keras,全程实战演示框架核心使用与建模方法。项目实战部分选择计算机视觉与自然语言处理领域经典项目,从零开始详解算法原理,debug模式逐行代码解读。适合准备就业和转行的同学们加入学习! 建议按照下列课程顺序来进行学习 (1)掌握深度学习必备经典网络架构 (2)深度框架实战方法 (3)计算机视觉与自然语言处理项目实战。(按照课程排列顺序即可)

fakeLocation13.5.1.zip

fakeLocation13.5.1 虚拟定位 ios13.5.1的最新驱动下载,iPhone/iPad免越狱虚拟定位工具Location-cleaned驱动已更新

UnityLicence

UnityLicence

Python可以这样学(第一季:Python内功修炼)

Python可以这样学(第一季:Python内功修炼)

Python+OpenCV计算机视觉

Python+OpenCV计算机视觉

土豆浏览器

土豆浏览器可以用来看各种搞笑、电影、电视剧视频

【数据结构与算法综合实验】欢乐连连看(C++ & MFC)案例

这是武汉理工大学计算机学院数据结构与算法综合实验课程的第三次项目:欢乐连连看(C++ & MFC)迭代开发代码。运行环境:VS2017。已经实现功能:开始游戏、消子、判断胜负、提示、重排、计时、帮助。

php+mysql学生成绩管理系统

学生成绩管理系统,分三个模块:学生,教师和管理员。 管理员模块:负责学生、老师信息的增删改;发布课程信息的增删改,以便让学生选课;审核老师提交的学生成绩并且打印成绩存档;按照课号查询每个课号的学生成绩

多功能数字钟.zip

利用数字电子计数知识设计并制作的数字电子钟(含multisim仿真),该数字钟具有显示星期、24小时制时间、闹铃、整点报时、时间校准功能

推荐24个国外黄色网站欣赏

在中国清朝,明黄色的衣服只有皇子才有资格穿,慢慢的黄色在中国就成了高贵的颜色。在人们的色彩印象中,黄色也表现为暂停。所以当你的网页设计采用黄色的时候,会让人们在你的网页前停留。 黄色,就像橙色和红色,黄色也是一个暖色。它有大自然、阳光、春天的涵义,而且通常被认为是一个快乐和有希望的色彩。黄色是所有色相中最能发光的颜色,给人轻快,透明,辉煌,充满希望的色彩印象。 黄色是一个高可见的色...

u-boot-2015.07.tar.bz2

uboot-2015-07最新代码,喜欢的朋友请拿去

一学即懂的计算机视觉(第一季)

一学即懂的计算机视觉(第一季)

学生成绩管理系统(PHP + MYSQL)

做的是数据库课程设计,使用的php + MySQL,本来是黄金搭配也就没啥说的,推荐使用wamp服务器,里面有详细的使用说明,带有界面的啊!呵呵 不行的话,可以给我留言!

Windows版YOLOv4目标检测实战:训练自己的数据集

Windows版YOLOv4目标检测实战:训练自己的数据集

C++语言基础视频教程

C++语言基础视频教程

玩转Python-Python3基础入门

玩转Python-Python3基础入门

2019校招硬件乐鑫+比特大陆笔试题

楼主水硕一枚,参加了2019年的秋招。自己总结了下乐鑫的笔试题目(现场笔试)以及网上考试的比特大陆的题目

成年人用得到的6款资源网站!各个都是宝藏,绝对让你大饱眼福!

不管是学习还是工作,我们都需要一些资源帮助我们有效地解决实际问题。 很多人找资源只知道上百度,但是你们知道吗,有的资源是百度也搜索不出来的,那么今天小编就给大家介绍几款好用的资源网站,大家赶紧收入囊中吧! 1.网盘007 https://wangpan007.com/ 一款全能的资源搜索网站!只需要输入关键字,就能获得你想要的视频、音乐、压缩包等各种资源,网上...

使用TensorFlow+keras快速构建图像分类模型

使用TensorFlow+keras快速构建图像分类模型

Python数据挖掘简易入门

Python数据挖掘简易入门

玩转Linux:常用命令实例指南

玩转Linux:常用命令实例指南

web网页制作期末大作业

分享思维,改变世界. web网页制作,期末大作业. 所用技术:html css javascript 分享所学所得

编程实现学生基本信息管理程序

编程实现学生基本信息管理程序。学生基本信息包括:学号、姓名、性别、年龄、班级、学院、专业等。具体实现的管理功能如下: (1) 输入并显示多个学生的基本信息; (2) 可根据需要实现学生信息的添加; (

相关热词 c#树形选择 c#中类图的使用方法 c# 传参 调用exe c# 怎么定义方法 c# 修改本地时间 c#前台怎么读取资源文件 c# xml转list c#实现框选截图 m*m乘法表c# c# 乘法99表
立即提问