码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式之单例模式

时间:2019-11-05 01:08:25      阅读:79      评论:0      收藏:0      [点我收藏+]

标签:设计模式   问题   访问   线程   方法   nbsp   解决   原创   single   

网上讲解单例模式的文章已经很多了,但是没有我的原创,所以要写一个.

单例模式是设计模式中的经典之一,主要的作用就是保证只有一个实例被创建.

单例模式分为饥汉模式和饱汉模式,饥汉模式是指在一开始就创建实例;饱汉模式是指在需要时才创建实例

以下是饱汉模式:

 1 public class SingleTon {
 2     public static SingleTon instance = null;
 3     
 4     public SingleTon(){};
 5     
 6     public static SingleTon getInstance() {
 7         if(instance == null) {
 8             instance = new SingleTon();
 9         }
10         return instance;
11     }
12     
13 }

饥汉模式:

1 public class SingleTon {
2     public SingleTon(){};
3     private static SingleTon instance = new SingleTon();
4     public static SingleTon getInstance() {
5         return instance;
6     }
7 }

总结来说:创建单例模式主要有两个个步骤:

1.构造方法私有化

2.提供返回实例的静态方法

在单线程环境下这样创建单例模式是没有问题的,但是在多线程环境下可能就不能保证只创建一个实例.针对饱汉模式解决办法如下:

1 synchronized (SingleTon.class) {
2             if(instance == null) {
3                 instance = new SingleTon();
4             }
5         }

即在创建实例外层加上synchronized 模块,保证在同一时间只有一个线程能访问创建实例的方法,但是也会有影响效率的问题,为了避免每次到这个方法时造成线程排队,所以可以进一步优化:双重检查

1 if(instance == null) {
2             synchronized (SingleTon.class) {
3                 if(instance == null) {
4                     instance = new SingleTon();
5                 }
6             }
7         }

在synchronized 外层在判断一次实例是否被创建,通过双层检查的模式可以兼顾线程安全和性能.

 

设计模式之单例模式

标签:设计模式   问题   访问   线程   方法   nbsp   解决   原创   single   

原文地址:https://www.cnblogs.com/blog-xiao/p/11795770.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!