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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张源锋 中级黑马   /  2013-3-31 22:12  /  1845 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 无奈№追夜 于 2013-3-31 22:43 编辑

package model1;
public class Singleton {
   private Singleton sig = null;

     public Singleton getInstance(){
        if(sig==null){
            this.sig = new Singleton();
        }
           return this.sig;
    }

     private Singleton(){}
}

有人说这不算单例,大神门求解啊!!!!

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

9 个回复

倒序浏览
本帖最后由 黑马李超 于 2013-3-31 22:18 编辑

是单例模式,但是有线程安全隐患。需要加sychronized语句提高安全性以及双重判断语句提高效率。
if(sig==null)
{
   sychronized(Singleton.class)
{
   if(sig==null)
{
  sig = new Singleton();
}
}
}

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
1、getInstance()方法要设置成静态。
2、多线程会出现安全问题,需要加同步。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
看似是懒汉式啊  但是没有定义静态的对象和静态的访问方法,所以这不是懒汉式. 这个程序没有办法访问的
private static Singleton sig = null;

    public static Singleton getInstance(){

        if(sig==null)
           this.sig = new Singleton();
        
        return this.sig;
        }
     private Singleton(){}

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
黑马李超 发表于 2013-3-31 22:16
是单例模式,但是有线程安全隐患。需要加sychronized语句提高安全性以及双重判断语句提高效率。
if(sig==nu ...

真的么???
回复 使用道具 举报
本帖最后由 袁梦希 于 2013-3-31 22:34 编辑

  //懒汉式:延迟加载方式。
  当多线程访问懒汉式时,因为懒汉式的方法内对共性数据进行多条语句的操作。所以容易出现线程安全问题。为了解决,加入同步机制,解决安全问题。但是却带来了效率降低。
   为了效率问题,通过双重判断的形式解决。
class Single{
        private static Single s = null;
        private Single(){}
        public static Single getInstance(){ //锁是谁?字节码文件对象;
                if(s == null){
                        synchronized(Single.class){
                                if(s == null)
                                        s = new Single();
                        }
                }
                return s;
        }
}

希望可以帮助到楼主。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
黑马李超 发表于 2013-3-31 22:16
是单例模式,但是有线程安全隐患。需要加sychronized语句提高安全性以及双重判断语句提高效率。
if(sig==nu ...

对O、、、、、犯了个低级的错误,多线程的安全问题能俱体说下吗
回复 使用道具 举报
本帖最后由 黑马李超 于 2013-3-31 22:40 编辑
无奈№追夜 发表于 2013-3-31 22:35
对O、、、、、犯了个低级的错误,多线程的安全问题能俱体说下吗

老毕的多线程视频最后着重讲了单例模式的懒汉式 你可以看下
另外getInstance方法需要加静态  我没有注意到
回复 使用道具 举报
  1. class Singleton
  2. {
  3.         private static Singleton sig = new Singleto();
  4.         private Singleton(){}
  5.         public static Singleton()
  6.         {
  7.                 return sig;
  8.         }
  9. }//饿汉式

  10. class Singleton
  11. {
  12.         private static Singleton sig = null;
  13.         private Singleton(){}

  14.         public static Singleton getInstance()
  15.         {
  16.                 if(sig==null)
  17.                 {
  18.                         synchronized(Singleton.class)
  19.                         {
  20.                                 if(sig==null)
  21.                                         sig= new Singleton();
  22.                         }
  23.                 }
  24.                 return s;
  25.         }
  26. }//懒汉式并且解决的安全问题
复制代码

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
袁梦希 发表于 2013-3-31 22:33
  //懒汉式:延迟加载方式。
  当多线程访问懒汉式时,因为懒汉式的方法内对共性数据进行多条语句的操 ...

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