2017-02-13 60 views
-2

我正在創建的程序需要一個線程對象數組。更具體地說,我有一個擴展線程的類。我這樣做是爲了讓每個新創建的對象都在自己的線程上運行。如果我想殺死線程並將其從數組元素中移除,那麼我可以在該空間中創建一個新的線程對象,那麼我該怎麼做?這是我的想法。如何從數組中刪除線程對象?

我明白,刪除對線程的引用並不會實際上停止線程。要做到這一點,我首先需要中斷線程。要從數組中刪除線程對象,我可以簡單地將它設置爲空嗎? I .: .:

array[i].interrupt();  
array[i] = null; 

然後,我將能夠在該空間中創建一個新的線程?

array[i] = new Thread(); 

假設Thread對象的run方法處理中斷正常等

+0

什麼阻止你嘗試?中斷與停止不同。 – f1sh

+0

這應該可行,但要確保線程在創建新線程之前已停止,可以在將元素設置爲null之前執行array [i] .join()。 –

+0

你可以分享你的需求,爲什麼你需要一個線程對象數組? – marknorkin

回答

0

要從數組中刪除線程對象,可我只是讓它空

是。這應該使索引位置i的參考指向null。但是,如果您將索引位置i設置爲null,然後立即指定array[i] = new Thread();,則可以跳過將其設置爲null的步驟,而僅使用array[i] = new Thread();代替。

另請注意,僅將元素添加到數組中將不會啓動新插入的Thread。在陣列中插入新的Thread以啓動新的Thread後,您仍然需要撥打array[i].start()

也就是說,從Thread延伸出來只有在計劃覆蓋Thread類中的某些功能時纔有意義。 (我個人沒有看到任何有效的用例)。您應該改爲執行Runnable並將其傳遞給Thread構造函數。