Java如何销毁单例实例

Java如何销毁单例实例,java,singleton,Java,Singleton,我有一个这样创建的单例 private static class SingletonHolder { public static Singleton INSTANCE = new Singleton(); } public static Singleton getInstance() { return SingletonHolder.INSTANCE; } 我想在某个时间重置singleton实例。(我确信此时重置singleton实例是安全的)。我试图删除最后一个说明符,

我有一个这样创建的单例

private static class SingletonHolder { 
    public static Singleton INSTANCE = new Singleton();
}

public static Singleton getInstance() {
    return SingletonHolder.INSTANCE;
}
我想在某个时间重置singleton实例。(我确信此时重置singleton实例是安全的)。我试图删除最后一个说明符,并在我想重置它时将实例设置为null,但问题是如何获得另一个实例(它将保持null)

另一个问题是移除SingletonHolder中的最终说明符是否安全


谢谢

如果你真的需要重置一个单例实例(实际上没有多大意义),你可以将它的所有内部成员封装在一个私有对象中,并通过显式的
initialize()
reset()
方法重新初始化。
通过这种方式,您可以保留单例实例并提供某种类型的“重置”功能。

您可以为其他类提供一个包可见(默认访问级别)方法,以便能够重置单例实例,如下所示

class SingleGuy{
 private static SingleGuy=new SingleGuy();//eager init mode
 synchronized static void initTheGuy(){
  SingleGuy=new SingleGuy();//while this not recommended!
 }
 synchronized static void resetTheInstance(){
  /*Reset the singleton state as you wish. just like you reinitialized*/
 } 
}

那么谁来重置单身状态呢?单身阶级还是来自外部的人?!在这种情况下(需要一个全新的对象实例),我认为您不需要单例,而是一个工厂。您当前的类根本不是单例。它仍然有一个
public
构造函数。你试过添加
reset
方法吗?听起来不错。实际上,我想重置为一个新实例,而不是null。问题是,我百分之百确定在重置时只有一个线程将访问单例。谢谢你的帮助。在这种情况下,单例仍然不是空的。我的意思是,如果调用getInstance(),您将再次得到相同的实例。。。