锁定老帖子 主题:关于JAVA单例模式
精华帖 (1) :: 良好帖 (2) :: 新手帖 (7) :: 隐藏帖 (12)
|
|
---|---|
作者 | 正文 |
发表时间:2012-03-14
public class Singleton { private static Singleton st; public static Singleton getInstance() { if (null == st) { return new Singleton(); } return st; } } 他说这样写不对。。晕了。。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-03-15
最后修改:2012-03-15
在多线程环境下有可能出现2个实例的情况。如果占用资源不大,可以直接在声明处创建,利用类加载的线程安全来保证;否则需要做一个sync。
另外,不要再用 if(null==smothing),应该if(something==null),这是几百年前的做法了,现代的编译器已经可以探测这样的错误了。 |
|
返回顶楼 | |
发表时间:2012-03-15
考虑lazy load的话,可以用double check技术。
不过double check有时候也不是100%线程安全的 |
|
返回顶楼 | |
发表时间:2012-03-15
wumingshi 写道 在多线程环境下有可能出现2个实例的情况。如果占用资源不大,可以直接在声明处创建,利用类加载的线程安全来保证;否则需要做一个sync。
另外,不要再用 if(null==smothing),应该if(something==null),这是几百年前的做法了,现代的编译器已经可以探测这样的错误了。 “ if(null==smothing),应该if(something==null)” 这只是个习惯问题吧。。。跟左大括号是否另起一行是一样的性质 |
|
返回顶楼 | |
发表时间:2012-03-15
最后修改:2012-03-15
|
|
返回顶楼 | |
发表时间:2012-03-15
请参考此条目:
http://en.wikipedia.org/wiki/Initialization_on_demand_holder_idiom |
|
返回顶楼 | |
发表时间:2012-03-15
Fkron 写道 今天和一人讨论以下这几形式的单例,看这样写是否正确??
public class Singleton { private static Singleton st; public static Singleton getInstance() { if (null == st) { return new Singleton(); } return st; } } 他说这样写不对。。晕了。。 可能他是这个意思, 你每次都new一个新的对象那还叫单例么? public class Singleton { private static Singleton st; public static Singleton getInstance() { synchronize(Singleton.class){ if (null == st) { st = new Singleton(); } } return st; } } |
|
返回顶楼 | |
发表时间:2012-03-15
楼主马虎了
|
|
返回顶楼 | |
发表时间:2012-03-15
构造函数没有私有化。
|
|
返回顶楼 | |
发表时间:2012-03-15
这就是一个坑
|
|
返回顶楼 | |