java集群优化——多线程下的单例模式
来源:互联网 发布:非农就业数据公布 编辑:程序博客网 时间:2024/06/06 05:47
在最初学习设计模式时,我为绝佳的设计思想激动不已,在以后的工程中,多次融合设计模式,而在当下的设计中,我们已经觉察出了当初设计模式的高瞻远瞩,但是也有一些不足,需要我们去改进,有人说过,世界上没有绝对的事,当然,再简单的事情,环境变了,也会发生变化,今天和大家一起分享在多线程下单例模式的优化。
1,传统
首先,我们回顾下传统的单例(懒汉式)是如何工作的:
public class SingletonClass{ private static SingletonClass instance=null; public static SingletonClass getInstance() { if(instance==null) { instance=new SingletonClass(); } return instance; } private SingletonClass(){ }}
我们不难看出,在多线程执行时,普通的代码会带了困恼,大家看多线程代码运行时的图片:
2,双重锁
我们看到线程1和线程2都执行了代码②,我们得到的并不是一个单例的对象,而是多个对象。针对这些我们进行了同步的优化。
public static class Singleton{ private static Singleton instance=null; private Singleton(){ //do something } public static Singleton getInstance(){ if(instance==null){ synchronized(Singleton.class){ if(null==instance){ instance=new Singleton(); } } } return instance; }}
我们在看看这种代码的多线程运行图:
大家看,③只执行了一次,不仅仅是它被同步机制保护了,而且是进行了双重判定,这样保证多线程下单例模式的正常运行。
3,枚举
在jdk1.5之后,java注意到这一细节,在创建单例应用时,我们可以利用枚举类型完成我们的工作,并且他是线程安全的。
源码:
public enum SingletonEnum{ INSTANCE; private String name; publicString getName() { returnname; } publicvoid setName(String name) { this.name = name; } }
这种优化,使我们更优雅地适用代码,但是也带来了一定的问题,就是我们对对象的类型有了模糊的概念,所以在工作中,还是建议保留双锁模式,对一些工具类则可以采取枚举类型优化,简化我们的代码与逻辑。
总结:
细节的优化,就像雕琢一件艺术品,我们接触的高人越多,这样的思想就越浓厚,所以,我们常常判断一个人事怎么的品格与素质,通过他接触的人,朋友就可以推测出来,而计算机内,也是如此,我们接触的优秀框架多了,自己自然就是优秀的设计师!
2 0
- java集群优化——多线程下的单例模式
- Java 多线程下的单例模式
- Java 多线程下的单例模式
- Java 多线程下的单例模式
- Java 多线程下的单例模式
- Java 多线程下的单例模式
- Java 多线程下的单例模式
- Java 多线程下的单例模式
- Java 多线程下的单例模式
- Java 多线程下的单例模式
- 关于多线程下的单例模式及其优化
- JAVA多线程 <三>单例模式下的多线程问题
- java基础—多线程下的单例设计模式的安全问题
- Java 多线程下的单例模式的设计
- java 中多线程下的单例模式
- java 中多线程下的单例模式
- Java基础:多线程下的单例模式
- Java——单例模式、多线程
- 3分钟看懂:7大教育培训企业邮件营销 (附案例)
- RHEL十四(使用虚拟化系统)
- 欢迎使用CSDN-markdown编辑器
- SYSAUX表空间使用率高问题处理
- AutoLayout的各种使用方法
- java集群优化——多线程下的单例模式
- nodejs npm常用命令
- jdom创建XML文档
- 206.Reverse Linked List(单链表逆置)
- 步步为营(十四)常用数据结构(7)STL-Queue(队列)priority_queue(优先队列)
- 极客班GeekBand - C++面向对象高级开发 - 2
- Hibernate浅析
- MongoDB命令以及使用
- SVD奇异值分解