小根堆还好,手撸图确实难受……不过我能说你的单列模式写错了么?你这个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;
    }
}