Java——单例设计模式中懒汉式并发访问的安全问题
2017-10-09 23:17
447 查看
//单例设计模式中懒汉式并发访问的安全问题 //饿汉式 无安全问题 class Single{ private static final Single s = new Single(); private Single(){} public static Single getInstance(){ return s; } } //懒汉式 错 有安全问题 /*class Single2{ private static Single2 s; private Single2(){} public static Single2 getInstance(){ if(s==null){ //--->t1 --->t2在这里线程有可能被抢走CPU //之后判断s也为空,也会执行下面的语句,就 //不符合单例设计模式的特点了,所以应该写成 //下面一段代码 s = new Single2(); } return s; } }*/ //懒汉式 对 class Single2{ private static Single2 s; private Single2(){}; public static Single2 getInstance(){ if(s==null){//这个判断条件是优化,可以提高效率,不加也正确 //如果没有上面这个if判断,所有的线程都得执行下面一行代码,即判断锁 //判断锁很浪费资源,加上上面的if判断,至少从第三个线程开始就不用判断锁了 //线程执行完同步代码块中的内容下一个线程才能拿到CPU //所以这里就保证了单例 synchronized(Single2.class){ if(s==null){ s = new Single2(); } } } return s; } } class Test implements Runnable{ public void run(){ Single s = Single.getInstance(); } } class test{ public static void main(String[] args){ Test test = new Test(); Thread t1 = new Thread(test); Thread t2 = new Thread(test); t1.start(); t2.start(); } }
相关文章推荐
- 单例设计模式中懒汉式并发访问的安全问题
- 黑马程序员——java中关于单例设计模式和懒汉式多调用的问题
- JAVA_单例模式懒汉式的线程安全问题
- 处理单例设计模式中懒汉式的安全问题过程
- 牛客网Java刷题知识点之什么是单例模式?解决了什么问题?饿汉式单例(开发时常用)、懒汉式单例(面试时常用)、单例设计模式的内存图解
- java设计模式--解决单例设计模式中懒汉式线程安全问题
- java基础—多线程下的单例设计模式的安全问题
- 设计模式——单例模式(Java)——考虑多线程环境下的线程安全问题
- 学习进度表 +解决单利设计模式懒汉式在多线程的安全问题
- Java设计模式中的单例模式的懒汉式和饿汉式
- Java单例设计模式(饿汉式和懒汉式)
- 用Java进行GUI设计,出现对必需的库 rt.jar 具有一定限制,因此无法访问类型 JButton等问题
- 不使用mutex设计模式解决并发访问cache
- 设计模式的实际应用——在C#中解决单客户端窗口数据并发问题(2010-08-04)
- 关于一些设计模式(面试小问题,Java篇)
- 多线程三,同步函数、静态同步函数和单例设计模式中懒汉式即延迟加载模式的多线程问题(毕向东老师)
- java单例设计模式 饿汉式 懒汉式
- JAVA并发设计模式学习笔记(二)—— Single Threaded Execution Pattern
- 初学设计模式(3)-----单例模式(在研究单例的线程安全问题时,发现一篇很全面的文章,直接转了)
- Java_设计模式_单例设计模式(饿汉式和懒汉式)