设计模式-单例模式

来源:互联网 发布:淘宝双11红包微信群 编辑:程序博客网 时间:2024/05/22 23:17

双重判断

public class TestSingleton {private TestSingleton(){}private static TestSingleton instance;;public static TestSingleton getSingleton(){if(instance==null){synchronized(TestSingleton.class){if(instance==null){instance = new TestSingleton();}}}return instance;}}
优点:使用双重检查,很大程度上避免了不必要的锁开销,提高了执行效率。这里要注意,虽然未使用volatile关键字,但是这里的synchronized已经保证了INSTANCE写操作对其它线程读操作的可见性。


静态常量

public class TestSingleton {private TestSingleton(){}private static final TestSingleton instance = new TestSingleton();public static TestSingleton getSingleton(){return instance;}}
优点:实现简单,无需使用动态代码块

缺点:在类装载是完成初始化。若实例一直未被使用,会造成资源浪费。



内部静态类

public class TestSingleton {private TestSingleton(){}public static TestSingleton getSingleton(){return InnerClass.Instence;}private static class InnerClass{private static final TestSingleton Instence=new TestSingleton();}}

优点:无线程同步问题,实现了懒加载,只有调用getSingleton()才会创建实例。



参考:http://www.jasongj.com/design_pattern/singleton/