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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 wyf20106 于 2014-8-15 15:58 编辑
  1. /*
  2. 单例模式的俩种写法:
  3. 这个是先初始化对象。
  4. 称为:饿汉式。
  5. Single类一进内存就应经创建好了对象。
  6. class  Single
  7. {
  8.         private static Single s = new Single();
  9.         private Single(){}
  10.         public static Single getInstance()
  11.         {
  12.                 return s;
  13.         }
  14. }

  15. */


  16. //对象是方法被调用时,才初始化,也叫做对象的延时加载。成为:懒汉式。
  17. //single类进内存,对象还没有存在,只有调用了getInstance方法时,才建立对象。
  18. class Single
  19. {
  20.         private static Single s = null;
  21.         private Single (){}
  22.         public static synchronized Single getInstance()
  23.         {
  24.                 if(s==null)
  25.                         s = new Single();
  26.                 return s;
  27.         }

  28. }
  29. //记录原则:定义单例,建议使用饿汉式
  30. class
  31. {
  32.         public static void main(String[] args)
  33.         {
  34.                 System.out.println("Hello World!");
  35.         }
  36. }
复制代码


评分

参与人数 1技术分 +1 收起 理由
格子、 + 1 淡定

查看全部评分

16 个回复

倒序浏览
努力学习,天天向上
回复 使用道具 举报
饿汉式和懒汉式的。
回复 使用道具 举报
复习了一下,谢谢了
回复 使用道具 举报
TanZhiPeng1991 发表于 2014-8-14 15:43
复习了一下,谢谢了

共同进步。。
回复 使用道具 举报
这是人人都发过的话题啊!!
回复 使用道具 举报
/**
* 单例 1
*
* @Description:饿汉
*/
class Single01 {
        private Single01() {
        }

        private static Single01 single = new Single01();

        public static Single01 getInstance() {
                return single;
        }
}
-------------------------------------------------------------------------------------
/**
* 单例 2
*
* @Description:懒汉
*/
class Single02 {
        private Single02() {
        }

        private static Single02 single = null;

        public static Single02 getInstance() {
                if (single == null) {
                        single = new Single02();
                }
                return single;
        }
}
-------------------------------------------------------------------------------------
/**
* 单例 3
*
* @Description:多线程下使用这个
*/
class Single03 {
        private Single03() {
        }

        private static Single03 single = null;

        public static Single03 getInstance() {
                if (single == null) {
                        synchronized (Single03.class) {
                                if (single == null) {
                                        single = new Single03();
                                }
                        }
                }
                return single;
        }
}
-------------------------------------------------------------------------------------
/**
* 单例 4
*
* @Description:
*/
class Single04 {
        private Single04() {
        }

        public static class Single04Holder {
                public static final Single04 single = new Single04();
        }

        public static Single04 getInstance() {
                return Single04Holder.single;
        }
}
-------------------------------------------------------------------------------------
/**
* 单例 4
*
* @Description:
*/
enum Single05 {
        // SINGLE();
        // public static Single05 getInstance() {
        // return Single05.SINGLE;
        // }
        SINGLE("帅哥", 20);
        private String name;
        private int age;

        private Single05(String name, int age) {
                this.name = name;
                this.age = age;
        }

        public static Single05 getInstance() {
                return Single05.SINGLE;
        }

        @Override
        public String toString() {
                return this.name + "<---age--->" + this.age;
        }
}

public class Test {

        public static void main(String[] args) {
                Single05 single = Single05.getInstance();
                System.out.println(single.toString());
        }
}

帅哥<---age--->20
回复 使用道具 举报
这样子 速度慢啊!
回复 使用道具 举报
哥们,谢谢分享!
回复 使用道具 举报
复习一下
回复 使用道具 举报
我不会告诉你单例的第三种写法是用枚举:D
回复 使用道具 举报
昨天刚看到多线程的单例类,说道懒汉式会因为多个线程共同访问时出现安全问题
  1. class Single
  2. {
  3. private static Single s = null;
  4. private Single(){}
  5. public static Single getInstance(){
  6. if(s==null)//这个地方会因为多个线程共同访问时出现安全问题当一个线程执行到此处,被另一个线程抢走执行资格,有可能会返回多个该类的实例对象
  7. s = new Single();
  8. return s;
  9. }
  10. }
复制代码
回复 使用道具 举报
学习一下
回复 使用道具 举报
思维 发表于 2014-8-14 23:44
我不会告诉你单例的第三种写法是用枚举

那还没看到了
回复 使用道具 举报
嘿~~ 发表于 2014-8-15 08:45
昨天刚看到多线程的单例类,说道懒汉式会因为多个线程共同访问时出现安全问题 ...

都到多线程了哇哇
回复 使用道具 举报

我可以说我在复习之前看过的吗,,,,,,多线程之前看的很烂,一点都不明白,
回复 使用道具 举报
复习一下!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马