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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 357016138 中级黑马   /  2014-7-17 18:02  /  813 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

懒汉式和饿汉式的区别?

7 个回复

倒序浏览
饿汉先加载,懒汉后面才加载。

点评

LYP
还有一个涉及到安全问题,我也不懂  发表于 2014-7-17 18:27
回复 使用道具 举报
这个问题,论坛里搜索一下吧!已经有很多很好的解答。。。
回复 使用道具 举报
涉及到安全问题的是,懒汉式。它们都属于单例设计模式,这个模式设计的最大特点就是,一个对象保证系统中只有一个实例,而且该实例易于外界访问。但是懒汉式的设计在多线程访问时,就不能保证系统中只会有一个实例了,就会出现安全问题,这个时候就用到同步了。
回复 使用道具 举报
不带你这么水贴的
回复 使用道具 举报
/**
单例设计模式:
保证一个类仅有一个实例,并提供一个全局访问点。
1:构造方法私有化 private
2:在本类中声明一个本类对象 private static
3:给外部提供一个静态方法,获取对象的实例。

涉及到安全问题的是,懒汉式。它们都属于单例设计模式,这个模式设计的最大特点就是,一
个对象保证系统中只有一个实例,而且该实例易于外界访问。
但是懒汉式的设计在多线程访问时,就不能保证系统中只会有一个实例了,就会出现安全问题,这个时候就用到同步了

饿汉式-----比较着急 生成对象的时候就先定义出对象
懒汉式----后生成对象:在本类中声明一个本类对象先null   在获取对象的实例中生成对象,

:::举个例子::::
*/
public class SingletonDemo{
        public static void main(String[] args){
         singleton1 S = singleton1.getInstance();
         S.Bn();
         System.out.println();
                 singleton2 S1 = singleton2.getInstance();
                 S1.Bn();
  }
}
//-----------------饿汉式-------------------------//
class singleton1{
             //1:构造方法私有化!private
                         private singleton1(){}
                        //2:声明一个本类对象
                         private static singleton1 S=new singleton1();
             //3:给外部提供一个静态方法,获取对象的实例。
             public static singleton1 getInstance(){
                                 return S;
                         }
            public void Bn(){
                                System.out.println("我是饿汉式!!!!");
                        }


}
//-----------------懒汉式-------------------------//
class singleton2{
             //1:构造方法私有化!private
                         private singleton2(){}
                         //2:声明一个本类对象
                         private static singleton2 S1=null;//在本类中声明一个本类对象先null
             //3:给外部提供一个静态方法,获取对象的实例。
             public static singleton2 getInstance(){
                                 if(S1==null){
                                         S1=new singleton2(); //这时候才本类中new一个本类
                                       
                                 }
                                 return S1;
                         }
            public void Bn(){
                                System.out.println("我是懒汉式!!!!");
                        }


}


回复 使用道具 举报 1 0
整好看到这里,来学习一下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马