001package net.gdface.utils; 002 003/** 004 * 基于volatileçš„åŒé‡æ£€æŸ¥é”定实现{@link ILazyInitVariable}的抽象类<br> 005 * 原ç†è¯´æ˜Žå‚è§<a href="http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html">《The "Double-Checked Locking is Broken" Declaration》</a><br> 006 * è¦æ±‚ JDK5 以上版本 007 * @author guyadong 008 * 009 * @param <T> variable type 010 */ 011public abstract class BaseVolatile<T> extends ILazyInitVariable.BaseLazyVar<T>{ 012 private volatile T var = null; 013 public BaseVolatile() { 014 } 015 @Override 016 public T get() { 017 // Double-checked locking 018 if(null == var){ 019 synchronized(this){ 020 if(null == var){ 021 var = doGet(); 022 } 023 } 024 } 025 return var; 026 } 027}