在線程完成它的工作之後,我應該顯式地將線程引用設置爲null還是沒有必要?如果我想將它設置爲null,那麼我應該在代碼中執行此操作?線程完成後,我應該明確地將線程引用設置爲null嗎?
我應該使用thread.isalive
標誌檢查線程是否存活,如果線程沒有活動,則將其設置爲空?
在線程完成它的工作之後,我應該顯式地將線程引用設置爲null還是沒有必要?如果我想將它設置爲null,那麼我應該在代碼中執行此操作?線程完成後,我應該明確地將線程引用設置爲null嗎?
我應該使用thread.isalive
標誌檢查線程是否存活,如果線程沒有活動,則將其設置爲空?
在線程 完成它的工作或它沒有必要之後,我應該明確地設置線程引用爲null嗎?
個人而言,我不打擾。在某些情況下,將對象引用顯式設置爲null真的很重要。不管類型如下:
這些是我能想到的。也許還有更多,但可能並不多。這裏的共同點是變量引用了一個消耗大量內存的對象。受管理的Thread
對象本身不會消耗大量內存,因此我無法想象將Thread
類型的變量設置爲null會爲您完成很多操作,無論它是如何使用的。大多數資源在線程啓動時分配,然後在線程結束時釋放資源。
我應該檢查,如果線程是活着還是不使用thread.isalive標誌和 然後將其設置爲null,如果它不是活着。
我更喜歡用Thread.Join
來測試並等待線程完成。事實上,我有從來沒有使用Thread.IsAlive
任何有用的......有史以來。
的GC實際上是足夠聰明,處理本地對象的引用之前的方法結束,如果它能夠檢測到基準不再使用。
你應該把一個線程像任何其他對象:
保持基準只要只因爲你需要它(例如用於Join()
)。
當你確實有一個長時間參考線程(即在一個靜態字段中),那麼當你不再需要它時,你應該將它設置爲null
。但最好不要有這樣的變數。
這與知道原始海報中引用的變量是相關的。局部變量或實例字段(在什麼對象上)或靜態字段? –
@JeppeStigNielsen這是一個靜態字段 – Charu
@Charu - 然後嘗試重新設計並擺脫它。 –
爲什麼你想把參數設置爲null? –
@DavidHeffernan這就是我問的問題? – Charu