10
我想正確關閉可關閉的對象,當它不再被其他線程引用時。使用ReferenceQueue和WeakReference
我寫了一些小測試,但在對象入隊後,get方法返回null,即poll方法返回沒有指示對象的正確對象。
public static void main(String[] args)
{
ReferenceQueue<Closeable> reaped = new ReferenceQueue<Closeable>();
Closeable s = <SOME CLOSEABLE IMPL>;
WeakReference<Closeable> ws = new WeakReference<Closeable>(s, reaped);
s = null;
System.gc();
Closeable ro = (Closeable)reaped.poll().get();
ro.close();
}
在此先感謝。 任何幫助將不勝感激。
嗨感謝這樣的快速反應,它是關於Lucene的的IndexSearcher的公司。 – yan
我只是在System.gc()後面試過了,ReferenceQueue的大小爲0 – yan
@yan不保證你的對象在System.gc()後不會得到GC,即使你退出JVM也是如此。不要使用finalization來處理業務邏輯,它只用於緩存和(最終)防止資源泄漏的特殊目的。你不能在終結器中說'commit()'或'rollback()'數據庫事務 –