码迷,mamicode.com
首页 > 编程语言 > 详细

单例模式(java环境)

时间:2016-03-24 16:06:38      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:

程序中只需要创建某个类的一个实例,用到单例模式。

应用场景:Runtime类、数据库连接池、日志管理(例如:log4j)

实现原理:一个类,内部定义了该类的静态变量,并且定义了获取该静态变量的静态方法;构造函数的访问权限定义为 private;

饿汉式单例模式:(类加载时被创建)

 1 public class Singleton {
 2   private static Singleton instance = new Singleton();
 3   private Singleton(){   // 访问权限 私有 是为了 防止类外通过构造函数获取该类的实例
 4   ...
 5   } 
 6   public static Singleton getInstance (){
 7       return instance;
 8   }     
 9 
10 }

懒汉式单例模式:(需要获取时才进行创建)

 

 1   public class Singleton {
 2     private static Singleton instance = null;
 3     private Singleton(){   // 访问权限 私有 是为了 防止类外通过构造函数获取该类的实例
 4      ...
 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     private static Singleton instance = null;
 3     private Singleton(){
 4        ...;
 5     }
 6     public static Singleton getInstance(){
 7         if( instance == null ){
 8            synchronized ( Singleton.class) { // 增加同步机制
 9                if( instance == null ) {
10                    instance = new Singleton();
11                }
12            }
13         }
14     }
15 }

 

 

 

单例模式(java环境)

标签:

原文地址:http://www.cnblogs.com/ChuangZhang/p/5315749.html

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