2 回答

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

TA貢獻(xiàn)1880條經(jīng)驗(yàn) 獲得超4個(gè)贊
我建議您查看并發(fā) API。有許多預(yù)定義的通用方法。通過使用 ExecutorService,您可以在向執(zhí)行器提交任務(wù)后調(diào)用 shutdown 方法,該方法會(huì)停止接受新任務(wù),等待之前提交的任務(wù)執(zhí)行,然后終止執(zhí)行器。
添加回答
舉報(bào)