A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© liuqjss 中级黑马   /  2016-4-21 08:49  /  760 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

懒汉式和饿汉式分别怎么写

6 个回复

倒序浏览
饿汉式:先初始化方式,类一进内存就已经创建好了对象。
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;               
        }       
}
回复 使用道具 举报
回复 使用道具 举报
楼上的已经写出来了
我来说说区别吧
1.饿汉式是静态初始化,随着类的加载就在内存中创建了一个实例,高效,安全,是空间换时间
2.懒汉式是动态初始化,当方法getInstance被加载时,才会在内存中创建一个实例,低效,线程不安全,是时间换空间
回复 使用道具 举报
学习了,,,,
回复 使用道具 举报
说的好,单类模式注意多线程应用时的不安全隐患就OK了
回复 使用道具 举报
toukya 发表于 2016-4-21 11:06
饿汉式:先初始化方式,类一进内存就已经创建好了对象。
class SingleMode1
{

  谢谢了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马