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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王陶成 中级黑马   /  2012-9-20 00:26  /  1488 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王陶成 于 2012-9-20 08:23 编辑


         懒汉式和饿汉式各有什么优缺点了?



单例模式写成这样可不可以


public class One06_07 {
        public static void main(String[] args) {
                Dd d1 = Dd.getInstence();
                d1.a = 3;
                Dd d2 = Dd.getInstence();
                System.out.println(d2.a);
        }
}

class Dd{
        static int a;
        private Dd() {
               
        }
        public static Dd getInstence() {
                 Dd d = new Dd();
                 return d;
        }
        public static void sy() {
                System.out.println(a);
        }
}

2 个回复

倒序浏览
本帖最后由 霍明波 于 2012-9-20 07:23 编辑

class Dd{
        static int a;
        private Dd() {
               
        }
        public static Dd getInstence() {
                 Dd d = new Dd();
                 return d;
        }
        public static void sy() {
                System.out.println(a);
        }
}
你这个显然不可以,在多个线程执行的时候,如果执行到
  Dd d = new Dd();的时候切换到另一个线程进入的话,调用这个方法就会又
执行Dd d = new Dd();,这样就会创建多个对象了。
一般的要在外面声明出对象,在获得对象的方法中直接返回,也就是说在返回的方法中有一句代码(饿汉式);
class Dd{
        static int a;
        private Dd() {
               
        }
        private static final Dd  d = new Dd();
        public static Dd getInstence() {
              //   Dd d = new Dd();
                 return d;
        }
        public static void sy() {
                System.out.println(a);
        }
}
懒汉式在你的代码public static Dd getInstence() 中加同步修饰:
饿汗式:在外部静态的创建出对象,而懒汉式实在获得对象方法中创建对象 ,想你写了两块代码。
一般的用饿汉式,比较快,省资源。
                 

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
楼上说的很对,你这样就不是单例模式了,单例必须在getInstance里获取对象,而你的这个构造了对象,所以,每一次getInstance就会产生一个对象,所以就不是单例了。如果要单例那么就改为 在类里面定义这样的一个成员private static Dd d = new Dd();
然后public static Dd getInstance(){return d;}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马