论坛首页 Java企业应用论坛

面试单例

浏览 15527 次
锁定老帖子 主题:面试单例
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2013-08-13  
楼主的代码看了蛋疼,帮楼主翻译下:
public class Single
{
  private final static Single single = new Single();

  private Single()
  {
  }

  public static Single getIntance()
  {
    return single;
  }
}

另附,静态内部类写法(懒汉模式):
class Singleton
{
  private Singleton()
  {
  }

  private static class LazySingleton
  {
    public static Singleton singleton = new Singleton();
  }

  public static Singleton getInstance()
  {
    return LazySingleton.singleton;
  }
}
0 请登录后投票
   发表时间:2013-08-18  
lz第一次写的应该加上final修饰,
Private Static final. Single single =new. Single();这样写e;
或者还有就是在get的时候去new 在,这时候就是需要加上synchronized了
第一个是我们常说的饿汉式,第二个是懒汉式。
懒汉是为了性能在有改进为double-check模式,又有后来的内部类保证或者是枚举保证唯一等说法。
详情请看:http://alaric.iteye.com/blog/1909007 这个文章和讨论。
0 请登录后投票
   发表时间:2013-08-19  
用类级内部类,在这个类级内部类里面去创建对象实例。
这样一来,只要不使用到这个类级内部类,那就不会创建对象实例,从而同时实现延迟加载和线程安全。
public class InnerClassSingleton {
    /**
     * 类级的内部类,也就是静态的成员式内部类,该内部类的实例与外部类的实例
     * 没有绑定关系,而且只有被调用到时才会装载,从而实现了延迟加载
     */
    private static class SingletonHolder{
        /**
         * 静态初始化器,由JVM来保证线程安全
         */
        private static InnerClassSingleton instance = new InnerClassSingleton();
    }
    /**
     * 私有化构造方法
     */
    private InnerClassSingleton(){
    }
    public static  InnerClassSingleton getInstance(){
        return SingletonHolder.instance;
    }
}

参见《研磨设计模式》单例模式
0 请登录后投票
   发表时间:2013-08-24  
饿汉式 没必要加同步吧
0 请登录后投票
   发表时间:2013-08-28  
多线程情况下 单例是需要加锁的
0 请登录后投票
   发表时间:2013-09-02  
面试官是个水货。用枚举实现很好啊。
0 请登录后投票
   发表时间:2013-09-04  
楼主是正确的,静态初始化 属性 确保代码线程安全 也就是饿汉模式
或者用volatile 关键字 声明属性 double-check 也就是懒汉模式
需要类似
if(xxx==null){
   synchronized(XXX.class){
      if(xxx==null){
         xxx=new XXX();
      }
   }
}
return xxx;

除非初始化开销很大 加之使用频率不高  一般都采用第一种方式即可
0 请登录后投票
   发表时间:2013-09-30  
现在只要写单例直接就饿汉。其他的都可以忽略了。这方式简单而安全
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics