自己以前认识的单例模式很简单:
方式一:
public class TestSecrity {
private static TestSecrity test = null;
public static synchronized TestSecrity getInstance() {
if(test == null) {
test = new TestSecrity();
}
return test;
}
private TestSecrity() {
}
}
方式二:
public class TestSecrity {
private static TestSecrity test = new TestSecrity ();
public static TestSecrity getInstance() {
return test;
}
private TestSecrity() {
}
}
原来以为这两种方式写好之后就没有问题,
今天拜读了下面的文章,才知道第一种是有问题;而且即使是第一种方式,每次调用都会要同步,众所周知,同步是要消耗性能的,所以很多人想了一个办法:
进行双重检查锁定,但是这样仍然不能保证线程安全。
具体看下面的收藏贴,
收藏贴
http://www.ibm.com/developerworks/cn/java/j-dcl.html
另外:当多个线程访问同一个对象的方法的时候,线程是单独保存一份数据在栈中,也就是说方法中的局部变量是不会被共享的,不会存在线程安全问题。
分享到:
相关推荐
线程安全的单例模式 线程安全的单例模式 线程安全的单例模式
Java中懒汉单例设计模式线程安全测试,单例设计模式的测试
单例模式三种线程安全的表达方式,其中枚举方式的单例是最安全的
主要介绍了Java 单例模式线程安全问题的相关资料,希望通过本文大家能了解掌握单例模式中线程安全的使用方法,需要的朋友可以参考下
C++11实现线程安全的单例代码和测试代码,包含singleton.h,main.cpp,希望帮助到大家。
使用"懒汉模式"与"饿汉模式"实现c++的单例模式,并且确保了单例模式的第一次实例化的线程安全,以及程序结束时,单例对象的资源收回,以防内存资源的泄漏
自己写的c++实现的单例模式日志类。支持多线程、日志等级、可输出每条日志的输出时间(精确到毫秒级),日志级别,支持可变长参数、标准格式化输出。 代码中包含VS2010示例程序,使用方便。
synchronized与单例的线程安全问题,博客地址:https://www.jianshu.com/p/486ed9c8662a
单例模式的七种实现方法以及分析,可以...3.5双重检查实现单例模式 10 3.6使用静态内部类实现单例模式 12 3.7使用枚举类实现单例模式 13 4.单例模式怎么用才合理? 14 4.1测试 14 4.2无边界 15 5.设计模式学习总结: 15
NULL 博文链接:https://javawl.iteye.com/blog/1831804
深入浅出:讲解单例模式,多线程安全和并发访问问题.让你轻松应对面试
本资源描述了C++11 中多线程的创建,C++11中std命名空间中将boost库中的Thread加入,boost多线程从准标准变为标准,其中还介绍了C++ 多线程下的单例模式的使用,本文档为txt文档
双重校验锁模式结合了懒汉模式和饿汉模式的优点,既实现了延迟加载,又保证了线程安全。你可以根据需求选择合适的单例模式实现方式。
Qt两种方法实现多线程的开启,及子线程的安全结束线程,及QMutex加锁,Qt单例化实现
该资源是多线程并发下的单例模式-源码,几乎包含了所有方式实现的单例模式,并且能够确保在多线程并发下的线程安全性。 读者可结合本人博客 http://blog.csdn.net/cselmu9?viewmode=list 中的《线程并发之单例模式...
双重检查锁定的单例模式4. 静态内部类实现单例模式5. 饿汉实现单例模式6. 饿汉变种实现单例模式7. 枚举实现单例模式static修饰下是怎么做到线程安全的?完全不使用synchronized实现单例模式1. CAS(AtomicReference...
设计模式之七种单例模式代码及ppt,包含多线程环境测试和反序列化测试
在本月的专栏中,David Geary探讨了单例模式以及在面对多线程(multithreading)、类装载器(classloaders)和序列化(serialization)时如何处理这些缺陷。 单例模式适合于一个类只有一个实例的情况,比如窗口管理器...
主要介绍了python实现线程安全的单例模式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
QT实现单例模式多线程及双重校验加锁的应用demo