2013-03-11 73 views
-4

我想創建一個類是IS0 TimerTaskThread。我認爲這個想法沒有錯。我在這篇文章here的「期望輸出」部分提到了我這樣做的原因。替代TimerTask,它支持等待完成?

Java類不能從兩個類繼承。那麼,我該如何解決這個問題呢?

原因是我在我的問題中提到的帖子。

實際輸出: 所有計時器任務都在主方法中執行。我的主代碼的最後一個打印語句在所有計時器任務執行之前顯示。我不想那樣。

預期輸出: 我希望main的最終打印語句在所有其他之後。

+2

「我想創建一個類是一個TimerTask,也是一個線程」爲什麼? – Cephalopod 2013-03-11 09:09:50

+0

@Arian - 原因是我在我的問題中提到的帖子。所有計時器任務都在主要方法中執行。我的主代碼的結束打印語句顯示在所有計時器任務執行之前。我不想那樣。我希望main的最終打印語句能夠在其他所有內容之後出現。 – Time 2013-03-11 09:13:17

+0

你應該爲你的問題提出一個不同的問題,而不是質疑設計邏輯 – rajesh 2013-03-11 09:15:49

回答

5

你在問錯誤的問題。 Java中不可能有多重繼承,但這不是你的實際目標。

你想要的是能夠等待多個定時任務完成。有幾種方法可以實現這一點。

也許最直接的就是使用ScheduledExecutionService,它會給你一個Future,你可以等待,類似於你習慣的join方法。

另一種方法是使用CountDownLatch讓每個定時器任務在完成時遞減鎖存器;然後您可以使用await等待他們完成。

還有一種策略是使用waitnotify原語自己構建同步 - 您的問題也不難解決這種問題。

+0

思考但是,貌似還有一個問題 - 現在http://code.nomad-labs.com/2011/12/09/mother-fk-the-scheduledexecutorservice/ 不是很確定 – Time 2013-03-11 10:16:04

+0

你期望什麼樣的例外?如果他們不應該導致任務被取消,那麼你應該在你的任務中處理它們,否則他們會當你獲得'未來'時,就會重新提出'ExecutionException'。至於停止後續執行,只有在拋出未捕獲的異常時纔會發生。我不確定我看到了問題。 – 2013-03-11 15:13:25

9

TimerTask的擴展和實現Runnable

編輯重申原來的問題後提出:檢查https://stackoverflow.com/a/4951059/869488

+9

'TimerTask'本身實現'Runnable'。所以這是沒有意義的。 – uba 2013-03-11 09:10:58

+1

是的,我現在正在檢查。無論如何,我在檢查文檔之前輸入了我想到的第一件事情:) – rajesh 2013-03-11 09:11:41

+0

這是如何得到7 upvotes而我的問題得到3 downvotes?不公平的:( – Time 2013-03-11 09:16:09

1

可以實現Runnable接口。

class BulbJob extends TimerTask implements Runnable 
{ 

    public void run() 
    { 

    } 
} 
+0

TimerTask的本身實現了Runnable,所以這是沒有意義的。 – Time 2013-03-11 09:18:17

+0

我們對此深感抱歉...我注意到它使用ScheduledExecutorService的現在 – Joe2013 2013-03-11 10:22:57