黑马程序员技术交流社区

标题: 单例模式 [打印本页]

作者: liuqjss    时间: 2016-4-21 08:49
标题: 单例模式
懒汉式和饿汉式分别怎么写
作者: toukya    时间: 2016-4-21 11:06
饿汉式:先初始化方式,类一进内存就已经创建好了对象。
class SingleMode1
{
        private static SingleMode1 s=new SingleMode1();
        private SingleMode1(){}
       
        public static SingleMode1 getInstance()
        {
                return s;
        }
}
懒汉式:后初始化方式,对象在方法调用时才初始化,也叫做类的延时加载。
class SingleMode2
{
        private static SingleMode2 s=null;
        private SingleMode2(){}       
        //public static  synchronized SingleMode2 getInstance()//加锁,,一次只有一个程序在执行;但是程序效率变低了
        public static  SingleMode2 getInstance()
        {
                //用多线程解决冲突问题;在讲多线程的时候重点再讲;
                if(s==null)
                {
                        synchronized (SingleMode2.class)
                        {                       
                                if(s==null)
                                        s=new SingleMode2();//方法调用时才建立对象
                        }
                }
                return s;               
        }       
}
作者: biu    时间: 2016-4-21 14:33

作者: 菊花爆满山    时间: 2016-4-21 15:00
楼上的已经写出来了
我来说说区别吧
1.饿汉式是静态初始化,随着类的加载就在内存中创建了一个实例,高效,安全,是空间换时间
2.懒汉式是动态初始化,当方法getInstance被加载时,才会在内存中创建一个实例,低效,线程不安全,是时间换空间
作者: zhoubinjian    时间: 2016-4-21 18:46
学习了,,,,
作者: 小海龙    时间: 2016-4-21 18:56
说的好,单类模式注意多线程应用时的不安全隐患就OK了
作者: liuqjss    时间: 2016-4-23 10:16
toukya 发表于 2016-4-21 11:06
饿汉式:先初始化方式,类一进内存就已经创建好了对象。
class SingleMode1
{

  谢谢了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2