enum SingletonEnum4{
INSTANCE;
public void get(){}
}
5.静态内部类式单例模式
优点:静态内部类的加载也是天然线程安全的,且不会在外部类加载时加载,
因此静态内部类式单例模式兼备并发高效率和延迟加载节省空间资源的优势
class SingletonStaticInnerClass5{
private static class SingletonClassInstance {
private static final SingletonStaticInnerClass5 instance= new SingletonStaticInnerClass5();
}
private SingletonStaticInnerClass5(){}
public static SingletonStaticInnerClass5 getInstance(){
return SingletonClassInstance.instance;
}
}
6.ThreadLocal
ThreadLocal会为每一个线程提供一个独立的变量副本,从而隔离了多个线程对数据的访问冲突。
对于多线程资源共享的问题,同步机制采用了“以时间换空间”的方式,
而ThreadLocal采用了“以空间换时间”的方式。前者仅提供一份变量,
让不同的线程排队访问,而后者为每一个线程都提供了一份变量,因此可以同时访问而互不影响。
class Singleton6{
private Singleton6(){}
private static final ThreadLocal<Singleton6> instance =
new ThreadLocal<Singleton6>(){
@Override
protected Singleton6 initialValue(){
return new Singleton6();
}
};
public static Singleton6 getInstance(){
return instance.get();
}
}