静态类使用
public class Singleton_00 {
public static Map < String , String > cache = new ConcurrentHashMap < String ,
String > ( ) ;
}
懒汉模式(线程不安全)
public class Singleton_01 {
private static final Singleton_01 instance ;
privat Singleton_01 { } ;
public static Singleton_01 getInstance ( ) {
if instance != null return instance;
instance = new Singleton_01 ( ) ;
return instance;
}
懒汉模式(线程安全)
public class Singleton_02 {
private static final Singleton_02 instance ;
privat Singleton_02 { } ;
public static synchronized Singleton_02 getInstance ( ) {
if instance != null return instance;
instance = new Singleton_02 ( ) ;
return instance;
}
饿汉模式
public class Singleton_03 {
private static final Singleton_03 instance = new Singleton_03 ( ) ;
public static Singleton_03 getInstance ( ) {
return instance;
}
内部类
public class Singleton_04 {
private static class SingletonHolder {
private static Singleton_04 instance = new Singleton_04 ( ) ;
}
public static Singleton_04 getInstance ( ) {
return SingletonHolder . instance;
}
双重校验
public class Singleton_05 {
private static Singleton_05 instance;
private Singleton_05 ( ) {
}
public static Singleton_05 getInstance ( ) {
if ( null != instance) return instance;
synchronized ( Singleton_05 . class ) {
if ( null == instance) {
instance = new Singleton_05 ( ) ;
}
}
return instance;
}
}
CAS「AtomicReference」(线程安全)
public class Singleton_06 {
private static final AtomicReference < Singleton_06 > INSTANCE = new
AtomicReference < Singleton_06 > ( ) ;
private static Singleton_06 instance;
private Singleton_06 ( ) {
}
public static final Singleton_06 getInstance ( ) {
for ( ; ; ) {
Singleton_06 instance = INSTANCE. get ( ) ;
if ( null != instance) return instance;
INSTANCE. compareAndSet ( null , new Singleton_06 ( ) ) ;
return INSTANCE. get ( ) ;
}
}
public static void main ( String [ ] args) {
System . out. println ( Singleton_06 . getInstance ( ) ) ;
org. itstack. demo. design. Singleton_06@2b193f2d
System . out. println ( Singleton_06 . getInstance ( ) ) ;
org. itstack. demo. design. Singleton_06@2b193f2d
}
}
枚举单例
public enum Singleton_07 {
INSTANCE;
public void test ( ) {
System . out. println ( "hi~" ) ;
}
public static void main ( String [ ] args) {
Singleton_07 instance = Singleton_07 . INSTANCE;
System . out. println ( Singleton_07 . INSTANCE) ;
}
}