3-2-Java多线程-案例-单例设计模式出现的问题
2016-11-20 22:28
357 查看
单例设计模式出现的问题
代码示例
class Demo implements Runnable{ public void run() { Single.getInstance(); } }
饿汉式
饿汉式多线程并发没有问题class Single { private static final Single SINGLE = new Single(); private Single(){} public static Single getInstance() { return SINGLE; } }
懒汉式
传统懒汉式并发状态下出现问题class Single { private static Single single = null; private Single(){} public static Single getInstance() { //所有的线程都可以并发进入此函数,进行此条件的判断 if (single == null) { return new Single(); } return single; } }
加入同步后的懒汉式
class Single { private static Single single = null; private Single(){} /** * 并发访问会有安全隐患,所以加入同步机制,但是降低的效率 * @return */ public static /*synchronized*/ Single getInstance() { //所有的线程都可以并发进入此函数,进行此条件的判断 synchronized (Single.class) { if (single == null) { return new Single(); } } return single; } }
改进效率后的懒汉式
class Single { private static Single single = null; private Single(){} /** * 并发访问会有安全隐患,所以加入同步机制,但是降低的效率 * 解决方法如下: * 可以通过双重判断的方式解决效率问题,减少判断锁的次数 * @return */ public static /*synchronized*/ Single getInstance() { //所有的线程都可以并发进入此函数,进行此条件的判断 if (single == null) { synchronized (Single.class) { if (single == null) { return new Single(); } } } return single; } }
相关文章推荐
- 设计模式——单例模式(Java)——考虑多线程环境下的线程安全问题
- java多线程-单例设计模式的问题及解决
- java基础—多线程下的单例设计模式的安全问题
- JAVA学习第二十五课(多线程(四))- 单例设计模式涉及的多线程问题
- JAVA学习第二十五课(多线程(四))- 单例设计模式涉及的多线程问题
- 关于一些设计模式(面试小问题,Java篇)
- 12 自定义标签/JSTL标签库/web国际化/java web之设计模式和案例
- 多线程三,同步函数、静态同步函数和单例设计模式中懒汉式即延迟加载模式的多线程问题(毕向东老师)
- Java 多线程设计模式
- java多线程12种设计模式
- 黑马程序员--读写字节数组,随机读写流,集合IO的思维导图,多线程部分,单例设计模式,线程和进程的概念,Java中的线程的创建方式,线程的随机性,线程的状态图,多线程操作共享数据的安全性,死锁
- JAVA 多线程-单例设计模式-懒汉式
- 别人的Morgan Stanley面试,注重基础,java core、多线程、设计模式、设计程序。。。
- 【JAVA面试题】设计单例模式的多线程实现
- 黑马程序员_java语言_多线程和设计模式
- Java 接口应用案例 (策略设计模式使用)
- JAVA并发设计模式学习笔记(一)—— JAVA多线程编程
- Java单例设计模式,多线程下同步
- java web之设计模式和案例
- 多线程经典案例——生产者/消费者问题的Java实现与详解