我想創建一個類是IS0 TimerTask
和Thread
。我認爲這個想法沒有錯。我在這篇文章here的「期望輸出」部分提到了我這樣做的原因。替代TimerTask,它支持等待完成?
Java類不能從兩個類繼承。那麼,我該如何解決這個問題呢?
原因是我在我的問題中提到的帖子。
實際輸出: 所有計時器任務都在主方法中執行。我的主代碼的最後一個打印語句在所有計時器任務執行之前顯示。我不想那樣。
預期輸出: 我希望main的最終打印語句在所有其他之後。
我想創建一個類是IS0 TimerTask
和Thread
。我認爲這個想法沒有錯。我在這篇文章here的「期望輸出」部分提到了我這樣做的原因。替代TimerTask,它支持等待完成?
Java類不能從兩個類繼承。那麼,我該如何解決這個問題呢?
原因是我在我的問題中提到的帖子。
實際輸出: 所有計時器任務都在主方法中執行。我的主代碼的最後一個打印語句在所有計時器任務執行之前顯示。我不想那樣。
預期輸出: 我希望main的最終打印語句在所有其他之後。
你在問錯誤的問題。 Java中不可能有多重繼承,但這不是你的實際目標。
你想要的是能夠等待多個定時任務完成。有幾種方法可以實現這一點。
也許最直接的就是使用ScheduledExecutionService
,它會給你一個Future
,你可以等待,類似於你習慣的join
方法。
另一種方法是使用CountDownLatch
讓每個定時器任務在完成時遞減鎖存器;然後您可以使用await
等待他們完成。
還有一種策略是使用wait
和notify
原語自己構建同步 - 您的問題也不難解決這種問題。
思考但是,貌似還有一個問題 - 現在http://code.nomad-labs.com/2011/12/09/mother-fk-the-scheduledexecutorservice/ 不是很確定 – Time 2013-03-11 10:16:04
你期望什麼樣的例外?如果他們不應該導致任務被取消,那麼你應該在你的任務中處理它們,否則他們會當你獲得'未來'時,就會重新提出'ExecutionException'。至於停止後續執行,只有在拋出未捕獲的異常時纔會發生。我不確定我看到了問題。 – 2013-03-11 15:13:25
TimerTask的擴展和實現Runnable
編輯重申原來的問題後提出:檢查https://stackoverflow.com/a/4951059/869488
你想要的設計不被Java支持。
受支持的設計是使用wait
和notify
而不是加入到TimerTask
線程(您不能這樣做)。在這個SO問題下的示例:A good small example to demonstrate wait() and notify() method in java
「我想創建一個類是一個TimerTask,也是一個線程」爲什麼? – Cephalopod 2013-03-11 09:09:50
@Arian - 原因是我在我的問題中提到的帖子。所有計時器任務都在主要方法中執行。我的主代碼的結束打印語句顯示在所有計時器任務執行之前。我不想那樣。我希望main的最終打印語句能夠在其他所有內容之後出現。 – Time 2013-03-11 09:13:17
你應該爲你的問題提出一個不同的問題,而不是質疑設計邏輯 – rajesh 2013-03-11 09:15:49