2012-04-27 68 views
1

我最初的目的是每xx TimeUnit執行一段代碼,而不用簡單地循環它並檢查一個標誌。我做了一些研究,並發現了兩個解決方案:如何暫停/恢復或更改TimerTask的週期時間?

  1. Timer + TimerTask - 一旦計時器暫停,你必須重新新的一個又一個。所以做TimerTask。

  2. ScheduledThreadPoolExecutor + Runnable - 與前面的組合相同。但有人說這是一個增強的。但它仍然沒有提供我之前提到的功能。

現在,我正在尋找一個優雅的方法來解決這個問題。也許我應該關注鎖?

回答

2

我會使用ScheduledExecutorService並使用Future.cancel()來掛起。和scheduleAtFixedRate再次啓動它。

如果您想更改期間,取消並將其與新期間重新添加,假設其未暫停。

如果要隱藏此詳細信息,可以使用suspend(),resume()和setPeriod()方法創建包裝。

+0

非常感謝,我想我應該儘快熟悉API。 – fish47 2012-04-28 17:33:37