[英]Java Threads, join() taking too long?
所以我有一些代碼,我正在主線程中創建6個線程,這些線程運行一些代碼。 我開始線程。 然后,我在線程上調用join()
,以便主線程在繼續執行之前等待它們全部消失。
現在,我正在使用一些非常基本且最可能不准確的方法來衡量我的代碼運行所需的時間。 只需調用即可在開始,結束時獲取系統時間,然后打印差異。
可以說,例如,運行我的所有代碼大約需要500毫秒。
我決定刪除每個線程對join()
的調用,相反,我只是告訴我的主線程睡眠20毫秒。 這導致我的代碼在大約200毫秒內完成,並且主線程設法使用工作線程中的適當數據繼續執行,即6個工作線程必須在等待20毫秒后完成。
因此,當我在每個工作線程上使用.join時,為什么要花這么長時間? 自然,我無法將調用保留在main方法中以sleep(20)
,而是希望使用join()
的方法
多線程錯誤的問題是,當它無法可靠運行時,您似乎正在工作。 您的線程可能在做最后不需要的事情,或者您加入線程后沒有立即使用結果。 無論如何,我建議您正確等待結果。
順便說一句,我將使用ExecutorService,因為它允許您回收線程並僅以Future<MyResult>
的形式等待所需的結果,請注意,這也會捕獲並拋出異常/錯誤。
如果您刪除了聯接,您的代碼也可能根本沒有完成。 如果您的主函數退出時沒有加入所有線程,則有可能通過setDaemon()將某些線程設置為守護程序線程,這將阻止程序清理等待它們。
您是否擁有所有涉及的代碼?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.