锁定老帖子 主题:面试单例
精华帖 (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; } } |
|
返回顶楼 | |
发表时间:2013-08-18
lz第一次写的应该加上final修饰,
Private Static final. Single single =new. Single();这样写e; 或者还有就是在get的时候去new 在,这时候就是需要加上synchronized了 第一个是我们常说的饿汉式,第二个是懒汉式。 懒汉是为了性能在有改进为double-check模式,又有后来的内部类保证或者是枚举保证唯一等说法。 详情请看:http://alaric.iteye.com/blog/1909007 这个文章和讨论。 |
|
返回顶楼 | |
发表时间: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; } } 参见《研磨设计模式》单例模式 |
|
返回顶楼 | |
发表时间:2013-08-24
饿汉式 没必要加同步吧
|
|
返回顶楼 | |
发表时间:2013-08-28
多线程情况下 单例是需要加锁的
|
|
返回顶楼 | |
发表时间:2013-09-02
面试官是个水货。用枚举实现很好啊。
|
|
返回顶楼 | |
发表时间:2013-09-04
楼主是正确的,静态初始化 属性 确保代码线程安全 也就是饿汉模式
或者用volatile 关键字 声明属性 double-check 也就是懒汉模式 需要类似 if(xxx==null){ synchronized(XXX.class){ if(xxx==null){ xxx=new XXX(); } } } return xxx; 除非初始化开销很大 加之使用频率不高 一般都采用第一种方式即可 |
|
返回顶楼 | |
发表时间:2013-09-30
现在只要写单例直接就饿汉。其他的都可以忽略了。这方式简单而安全
|
|
返回顶楼 | |