懒汉式单例优化议案
懒汉式单例优化方案
在实际的项目中几乎都用到了单例,但我认为单例是否可以优化
下面是我直接敲上去的,伪代码
下面是我认为优化的方案,在我们使用单例都会使用synchroized同步块,但是如果实例化一次就不会为null,synchroized同步块有点多余,虽然java对同步有很大的优化,我认为我们优化更保险
请给予评价
------解决方案--------------------
楼主研究精神非常可嘉,希望楼主能在此问题上进一步探索和优化,所以建议Google下关键字:双检锁
------解决方案--------------------
二楼提到了 双检锁 也就是双重检查,,其实在多线程环境还有其他方法进行单例的
例如 静态内部类,,另外枚举本身就是单例的反射都破解不了。。。
------解决方案--------------------
哈哈,楼主是个爱思考的学习者啊,楼主上的代码用到的技术如楼上的说的双重检查,这样有助于性能的提高,对了不妨试试枚举单例,也是一种非常好的实现方式,希望楼主学习进步,加油
在实际的项目中几乎都用到了单例,但我认为单例是否可以优化
下面是我直接敲上去的,伪代码
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下关键字:双检锁
------解决方案--------------------
二楼提到了 双检锁 也就是双重检查,,其实在多线程环境还有其他方法进行单例的
例如 静态内部类,,另外枚举本身就是单例的反射都破解不了。。。
------解决方案--------------------
哈哈,楼主是个爱思考的学习者啊,楼主上的代码用到的技术如楼上的说的双重检查,这样有助于性能的提高,对了不妨试试枚举单例,也是一种非常好的实现方式,希望楼主学习进步,加油