Java设计模式-单例模式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java设计模式-单例模式相关的知识,希望对你有一定的参考价值。
单例模式的定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点!
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设计模式-单例模式的主要内容,如果未能解决你的问题,请参考以下文章