1.CAS实现
public class Singleton {
private static final AtomicReference<Singleton> instance = new AtomicReference<>();
private Singleton(){}
public static Singleton getInstance(){
while(true){
Singleton singleton = instance.get();
if(singleton != null){
return singleton;
}
singleton = new Singleton();
if(instance.compareAndSet(null, singleton)){
return singleton;
}
}
}
public static void main(String[] args) {
Singleton instance1 = Singleton.getInstance();
Singleton instance2 = Singleton.getInstance();
System.out.println(instance1 == instance2);
}
}
2.ThreadLocal实现
public class Singleton {
private static final ThreadLocal<Singleton> instance = new
ThreadLocal<Singleton>(){
public Singleton getSingleton(){
return new Singleton();
}
};
private Singleton(){};
public static Singleton getInstance(){
return instance.get();
}
public static void main(String[] args) {
Singleton instance1= Singleton.getInstance();
Singleton instance2= Singleton.getInstance();
System.out.println(instance1 == instance2);
}
}