《Head First Design Patterns》读书笔记之单例模式

来源:互联网 发布:京瓷网络扫描设置 编辑:程序博客网 时间:2024/05/01 14:45
/** * @author dean * 最初的单例模式设计,注意两个static */public class SingleTest {private static SingleTest singleton;private SingleTest(){}public static SingleTest getInstance(){if(singleton == null)singleton = new SingleTest();return singleton;}}



/** * @author dean * 在多线程并发的情况下,还是有可能造成单例对象被多次new出来(仅仅在第一次getInstance()的时候可能发生) *  * synchronized 同步一下 getInstance()吧 */public class SingleTest2 {private static SingleTest2 singleton;private SingleTest2(){}public synchronized static SingleTest2 getInstance(){if(singleton == null)singleton = new SingleTest2();return singleton;}}

/** * @author dean *  * 如果不考虑性能的话SingleTest2的做法已经可以了 * 因为synchronized需要一些检测,会耗费一点时间,而且按SingleTest2的写法,每次getInstance的时候都需要检测 * 很耗性能,改进一下,利用volatile和synchronized同步块 */public class SingleTest3 {/** * volatile 保证多线程并发的情况下,对同一个变量使用的是同一块内存 */private volatile static SingleTest3 singleton;private SingleTest3(){}public static SingleTest3 getInstance(){if(singleton == null)// 这里只是在第一次执行的时候会检测一下,之后就不会再进行synchronized检测了synchronized(SingleTest3.class){singleton = new SingleTest3();}return singleton;}}


0 0
原创粉丝点击