小根堆还好,手撸图确实难受……不过我能说你的单列模式写错了么?你这个public的构造方法,我不调用 get() 方法,而是直接 new Single() 你如何保证单例?单例的前提是构造方法必须是 private 诶,还有想要用变量来保证单列,该变量必须要加上volatile关键字,否则在多线程下会有数据一致性问题(内存不可见),可能会同时创建出多个实例。
下面是单例的双重检索模式,懒加载、线程安全,还可以避免JVM指令重排序问题。
Public Single{
private static volatile Single instance;
private Single(){
}
public static Single getInstance(){
if(instance == null){
synchronized(Single.class){
if(instance == null){
instance = new Single();
}
}
}
return instance;
}
}