本文共 838 字,大约阅读时间需要 2 分钟。
在大量Java设计模式中,单例模式是常见的构建模式之一,其实现方式也可以根据某些特性产生多个变形。
下面介绍在Java 1.5中,结合使用volatile与synchronized,通过双校验锁机制实现的单例模式,实现代码如下:
public class MyDoubleCheckedSingleton { private volatile static MyDoubleCheckedSingleton singleton; private MyDoubleCheckedSingleton() { } public static MyDoubleCheckedSingleton getSingleton() { if (singleton == null) { synchronized (MyDoubleCheckedSingleton.class) { if (singleton == null) { singleton = new MyDoubleCheckedSingleton(); } } } return singleton; }}说明: 1.实例变量singleton使用volatile,是借助于Java 1.5提供的对实例变量的读写原子特性,这样对singleton变量的设置不会被中断(例如实例化过程未完成即被中断),并且设置的实例立刻被所有线程可见。
2.对于getSingleton()方法,为了尽量减少临界区,所以首先读取singleton变量判断是否为null,然后再加类锁进行后续的更新操作。这属于典型的“read-update-write"操作,只适用volatile不能保证并发的安全,所以需要使用synchronized加锁。
参考文献:
https://www.cs.umd.edu/users/pugh/java/memoryModel/jsr-133-faq.html#volatile
转载地址:http://cnlai.baihongyu.com/