2 回答

TA貢獻1806條經驗 獲得超5個贊
使用后需要“清理”或“關閉”的Java對象通常實現該AutoCloseable
接口。這使得使用try-with-resources可以輕松地進行清理。該類Thread
沒有實現AutoCloseable
,并且沒有“close”或“dispose”方法。因此,您不需要進行任何顯式清理。
然而
(new?Thread(this.runner)).start()
不保證立即開始 的計算Runnable
。您可能不關心它是成功還是失敗,但我想您確實關心它是否運行。您可能希望限制同時運行的這些任務的數量。例如,您可能只想一次運行一個。所以你可能想要join()
線程(或者,也許,加入超時)。加入線程將確保線程完成其計算。以超時方式加入線程會增加線程開始計算的機會(因為當前線程將被掛起,從而釋放可能運行其他線程的 CPU)。
但是,不建議創建多個線程來執行常規或頻繁任務。您應該將任務提交到線程池。這將使您能夠控制最大并發量,并且可以為您提供其他好處(例如區分不同任務的優先級),并分攤創建線程的費用。
您可以將線程池配置為使用固定長度(有界)任務隊列,并讓提交線程在隊列已滿時自行執行已提交的任務。通過這樣做,您可以保證提交到線程池的任務(最終)被執行。的文檔ThreadPool.execute(Runnable)
說明了這一點
在將來的某個時間執行給定的任務
這表明該實現保證它最終會運行所有提交的任務,即使您不執行這些特定任務以確保執行提交的任務。

TA貢獻1880條經驗 獲得超4個贊
我建議您查看并發 API。有許多預定義的通用方法。通過使用 ExecutorService,您可以在向執行器提交任務后調用 shutdown 方法,該方法會停止接受新任務,等待之前提交的任務執行,然后終止執行器。
添加回答
舉報