黑马程序员技术交流社区

标题: 饿汉式和懒汉式的区别 [打印本页]

作者: 苏-L-w    时间: 2014-6-25 22:24
标题: 饿汉式和懒汉式的区别
        饿汉式:
        public class Singleton{
            private static Singleton singleton = new Singleton ();
            private Singleton (){}
            public Singleton getInstance(){return singletion;}
       }

     懒汉式:
       public class Singleton{
            private static Singleton singleton = null;
            public static synchronized synchronized getInstance(){
                 if(singleton==null){
                     singleton = new Singleton();
                 }
                return singleton;
            }
       }

     比较:
         饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变
          懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的
          推荐使用第一种







            

作者: 彭飞    时间: 2014-6-25 23:25


你的懒汉式依旧不安全。

不如ABC三个线程,A判断>>null  进了if ,然后挂了,然后B判断,还是null,C是打酱油的。

A醒了,new Singleton(); B醒了以后还是 new Singleton();   C:老板酱油多少钱一斤啊。
作者: youngkay    时间: 2014-6-25 23:26
线程安全很重要的
作者: 陈云阳    时间: 2014-6-26 10:36
彭飞 发表于 2014-6-25 23:25
你的懒汉式依旧不安全。

不如ABC三个线程,A判断>>null  进了if ,然后挂了,然后B判断,还是null,C是 ...

:L哥们的也不扎实啊,函数上都加了锁,A进去没出来,B就根本进不去,只不过在函数上加锁AB每次进去都要进行判断,只能在IF弄个锁,这样A进去后创建了对象,以后AB进去就不用判断锁了会直接跳过
作者: 苏-L-w    时间: 2014-6-26 21:04
陈云阳 发表于 2014-6-26 10:36
哥们的也不扎实啊,函数上都加了锁,A进去没出来,B就根本进不去,只不过在函数上加锁AB每次进去都要进 ...

    哥们分享一下你的心得呗!这个该怎么改呢?
作者: 陈云阳    时间: 2014-6-27 00:11
  1.    public static Single getInstance()
  2.     {
  3.         if(s==null)//减少锁的判断次数,提高饿汉式的效率
  4.             synchronized(Single.class)
  5.         {
  6.             if(s==null)
  7.                 s = new Single();
  8.         }
  9.         return s;
  10.     }
复制代码

这个B老师讲了俩个视频了,这是饿汉式最优的写法,面试时要是有问饿汉式要会写
作者: 锦宁    时间: 2014-6-27 00:26
学习了!!!!!!!加油!
作者: 少先队员    时间: 2014-6-27 00:59
用饿汉式
作者: 彭飞    时间: 2014-6-27 20:54
陈云阳 发表于 2014-6-26 10:36
哥们的也不扎实啊,函数上都加了锁,A进去没出来,B就根本进不去,只不过在函数上加锁AB每次进去都要进 ...



学到后面你会知道了,

双if 套  synchronized   是懒汉式最安全最效率方案

作者: 彭飞    时间: 2014-6-27 20:56
苏-L-w 发表于 2014-6-26 21:04
哥们分享一下你的心得呗!这个该怎么改呢?

后面讲到的

跟这视频走吧


作者: 苏-L-w    时间: 2014-6-27 21:50
彭飞 发表于 2014-6-27 20:56
后面讲到的

跟这视频走吧

    :handshake




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