日期:2014-05-20  浏览次数:20574 次

懒汉式单例优化方案
本帖最后由 xtdhwl 于 2013-11-14 20:16:08 编辑
在实际的项目中几乎都用到了单例,但我认为单例是否可以优化

下面是我直接敲上去的,伪代码

 public class A {
  4 
  5         private static A instance;
  6 
  7         private A(){}
  8         
  9         public synchronized static A getInstance(){
 10                 if(instance == null){
 11                         instance = new A();
 12                 }
 13                 return instance;
 14         }
 15 
 16 }


下面是我认为优化的方案,在我们使用单例都会使用synchroized同步块,但是如果实例化一次就不会为null,synchroized同步块有点多余,虽然java对同步有很大的优化,我认为我们优化更保险
public class B{
 20 
 21         private static B instance;
 22         
 23         private B(){}
 24 
 25         public static B getInstance(){
 26                 if(instance == null){
 27                         instance = newInstance();
 28                 }
 29                 return instance;
 30         }
 31 
 32         private synchroized static B newInstance(){
 33                 if(instance == null){
 34                         instance = new B();
 35                 }
 36                 return instance;
 37         }
 38 } 


请给予评价

------解决方案--------------------
楼主研究精神非常可嘉,希望楼主能在此问题上进一步探索和优化,所以建议Google下关键字:双检锁
------解决方案--------------------
二楼提到了  双检锁  也就是双重检查,,其实在多线程环境还有其他方法进行单例的

例如 静态内部类,,另外枚举本身就是单例的反射都破解不了。。。
------解决方案--------------------
哈哈,楼主是个爱思考的学习者啊,楼主上的代码用到的技术如楼上的说的双重检查,这样有助于性能的提高,对了不妨试试枚举单例,也是一种非常好的实现方式,希望楼主学习进步,加油