本帖最后由 黄小贝 于 2013-11-4 23:35 编辑
在瞅多线程,怒查一下午资料,弄懂了 volatile的用法,然后,发现了如下问题,上代码- /**
- * 双重检查加锁 单例模式,据说JDK1.5之后可以用 volatile 和 双重检查加速来实现单例模式
- * @author yellowbaby
- *
- */
- public class SingletonOne {
- /**
- * volatile 的作用是让变量不再缓存在当前线程的本地空间,而是直接去操作main memory
- * 我的问题是,这里为什么要使用 volatile?
- */
- private volatile static SingletonOne singleton = null;
- private SingletonOne() {
- }
- public static SingletonOne getInstance() {
- if (null == singleton) {// 检查实例,如果不存在就进入同步区块
- synchronized (SingletonOne.class) {// 注意,只有第一次才彻底执行这里的代码
- if (null != singleton) {
- singleton = new SingletonOne();
- }
- }
- }
- return singleton;
- }
- }
复制代码 |