标题
内部类实现
原理
此原理又称:Lazy initialization holder class 。
多线程环境下,jvm对一个类的初始化会做限制,同一时间只会允许一个线程去初始化一个类,从虚拟机层面避免了大部分单例实现的问题。
综合使用了java的类级内部类和多线程缺省同步锁的知识,很巧妙的同时实现了延迟加载和线程安全。
实现
SingInstance.java
public class SingInstance{
//私有构造函数
private SingInstance (){
}
//获取单利方法
public static SingInstance getInstance(){
return SingHolder.singInstance;
}
//在私有静态内部类内部完成单利的初始化。
private static class SingHolder{
private static SingInstance singInstance = new SingInstance();
}
}
在Test.java
if (singleton1 == singleton2){
System.out.println("same");
}