簡體   English   中英

在Java中發布單例的實例

[英]Releasing instance of a singleton in java

我正在使用由按需初始化持有人習慣用法創建的單例。 完成后,我想“返回”單例,以便其他程序可以使用它。 我可以按照以下步驟做嗎...

創建單例

public class MyObject{
    private MyObject(){}
    private static class Holder{
       private static final MyObject INSTANCE = new MyObject();
    }
    public static MyObject getInstance(){
       return Holder.INSTANCE;
    }
}

在其他地方我用這個

MyObject myObject = MyObject.getInstance();
// do something
myObject = null;
System.gc();

這什么都不做:

myObject = null;

單例對象將始終由Holder類中的最終INSTANCE字段引用,並且永遠不會是GCd。

實際上,這就是“單身”的意思。 “單例”是僅為其創建一個實例且永不破壞該實例的類。 如果您還想要其他東西, 請稱之為其他東西。 不要稱其為“單身”。

我敢打賭,您要么想要使用某種形式的互斥來防止多個線程同時使用單例,要么您想要@Newerth所說的:一個對象池


而且,這已經過時了: System.gc(); 在Java的早期,當GC從堆中回收所有未使用的對象時,它將使所有其他一切停止,但是現代JVM在后台進行連續垃圾收集。 System.gc()的文檔已更改為僅作為建議

是的,這將起作用,但是不確定初始化的開銷(還)還不高,為什么還需要一個holder類。 如果您以后要向構造函數添加更多內容,那就好了,但是否則只會使代碼混亂,以至於沒有其他類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM