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

单例模式

时间:2015-09-04 07:34:46      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:

*懒汉式:(多线程高并发访问时要考虑同步问题)
        >代码,以用户实体为例(User)
            publiuc class User{

                /*1. 用户实体,静态全局依赖,类加载时即初始化为空指针,没有内存地址,但还
                *是可以引用
                */
                private static User instance=null;
                
                //2. 私有的构造函数,外部不能有以new关键字在堆内存中新创建的对象
                private User(){}

                //懒汉式,懒加载实例化的对象
                public static synchronized User getInstace(){
                    
                    //如果实例化对象为空指针
                    if(!instancre){
                        //实例化当前对象
                        instance=new User();
                        return instance;
                    }else{
                        //否则返回当前实例化的对象
                        return instance;
                    }
                }
            }
    *饿汉式:
        >代码,以用户实体为例(User):
            public class User{
                
                //类加载即初始化user对象,饿汉式,饥饿加载,
                private static User instance=new User();

                //供外部访问接口,得到供外部访问的实例化对象
                public static User getInstance(){
                    return instance;
                }
                    
                //私有构造函数,模拟数据库
                private User(){
                }
            }
    注:单例模式,只应许有一个类的实例,所以构造函数是私有的。
        *懒汉是不是在类加载时初始化类的实例化对象,不能保证对象的唯一性,所以在多线程的情况下尽管有
         实例对象空值的判断,也会产生线程安全的问题,因为多线程是按照时间片来运行线程的,破坏类代码
         的垂直执行的顺序,因此加上同步关键字synchronized,是代码块同步,线程安全。
        *饿汉式因为是在类加载的时候实例化静态类对象,因此无论何时都只有一个静态的全局依赖类对象,
         不会有线程的安全问题。

 

单例模式

标签:

原文地址:http://www.cnblogs.com/liaowanzhong/p/4781191.html

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