首页 > 编程语言 > 详细

Java设计模式-单例模式

时间:2018-09-17 17:10:37      阅读:139      评论:0      收藏:0      [点我收藏+]

单例模式的定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点!

1.懒汉式单例模式:

 1 public class Singleton {
 2      //懒汉式单例模式
 3     private  static  Singleton instance;
 4 
 5     //将构造方法设置成private,堵死了外界利用new创建此类实例的可能
 6     private Singleton(){};
 7 
 8     //synchronized  单线程可不用同步
 9     public static synchronized  Singleton  getSingleton(){
10 
11         if(instance==null){
12             instance =new Singleton();
13         }
14         return instance;
15     }
16 
17 }

 

懒汉式单例模式的缺点:1、效率比较低 2.在多线程高并发的情况下,线程不安全。(第一次被引用的时候创建实例)

2.饿汉式单例模式
1     private static Singleton instance = new Singleton();  
2     private Singleton (){}  
3     public static Singleton getInstance() {  
4     return instance;  
5     }  

 

饿汉式单例模式的缺点:这种静态初始化的方式在自己被加载时就将自己实例化。解决了多线程环境下不安全的问题。无需开发人员显式的编写线程安全代码。

3.双重锁定效验的单例模式:
 1 public class Singleton {
 2     private volatile static Singleton singleton;
 3     private Singleton (){}
 4     public static Singleton getSingleton() {
 5     if (singleton == null) {
 6         synchronized (Singleton.class) {
 7         if (singleton == null) {
 8             singleton = new Singleton();
 9         }
10         }
11     }
12     return singleton;
13     }
14 }

这样方式实现线程安全地创建实例,而又不会对性能造成太大影响。它只是第一次创建实例的时候同步,以后就不需要同步了。

由于volatile关键字屏蔽了虚拟机中一些必要的代码优化,所以运行效率并不是很高,因此建议没有特别的需要不要使用。双重检验锁方式的单例不建议大量使用,根据情况决定。

 

Java设计模式-单例模式

原文:https://www.cnblogs.com/taochen-go/p/9662845.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!