簡體   English   中英

java.util.Timer:它已被棄用了嗎?

[英]java.util.Timer: Is it deprecated?

我讀了一篇關於這個答案的評論以及關於不推薦使用java.util.Timer調度(抱歉,沒有引用)的許多其他問題。 我真的希望不要因為我使用它作為在Java中安排事情的輕松方式(並且它工作得很好)。 但如果它被棄用了,我會去別處看看。 但是,快速查看1.6API文檔並沒有說明它被棄用的任何內容。 在Sun的棄用清單中甚至沒有提到它。

是否正式棄用*如果是這樣,我應該使用什么呢?


*另一方面, 如果它沒有被棄用那么人們是否可以停止對這個無辜且精彩實施的集合類進行詆毀?

正如其他人所提到的,不是它不被棄用但我個人總是使用ScheduledExecutorService因為它提供了更豐富的API和更多的靈活性:

  • ScheduledExecutorService允許您指定線程數,而Timer始終使用單個線程。
  • 可以使用ThreadFactory構造ScheduledExecutorService ,以允許控制除名稱/守護程序狀態之外的線程方面(例如,priority, ThreadGroupUncaughtExceptionHandler )。
  • ScheduledExecutorService允許以固定延遲和固定速率ScheduledExecutorService任務。
  • ScheduledExecutorService接受Callable / Runnable作為它的工作單元,這意味着你不需要專門使用它來子類化TimerTask ; 即您可以將相同的Callable實現提交給常規ExecutorServiceScheduledExecutorService

我認為這是一種誤解。 Timer類的JavaDoc提到了ScheduledThreadPoolExecutor並注意到,這個類實際上是 Timer / TimerTask組合的更通用的替代品 沒有其他的。 不推薦使用Timer。

這次來自JavaDoc,ScheduledThreadPoolExecutor的另一個引用:

ThreadPoolExecutor,可以額外調度命令在給定延遲后運行,或定期執行。 當需要多個工作線程時,或者當需要ThreadPoolExecutor(此類擴展)的額外靈活性或功能時,此類優於Timer。

不,不是全部。 您可能希望使用其他機制(如Quartz)來滿足更復雜的計時器要求,但Timer可以很好地工作,並且不會去任何地方。

不,它沒有被棄用。 除了Sun的Deprecated List之外 ,您還會在JavaDoc中看到已棄用的類的注釋。 例如, StringBufferInputStream的注釋說:

已過時。 此類不能將字符正確轉換為字節。 從JDK 1.1開始,從字符串創建流的首選方法是通過StringReader類。

[JDK-8154799]在JDK的bug跟蹤器中棄用了Timer和TimerTask ,並且在2016年中期JEP 277聲明java.util.Timer (和TimerTask )將在JDK 9中棄用。

多個Java SE API將添加,更新或刪除@Deprecated注釋。 下面列出了這些變化的一些例子。

[...]

  • 將@Deprecated添加到java.util.TimerTimerTask

但是,在JDK 9發行版中,不會棄用這些類(不推薦使用的類可以在不推薦使用的列表中找到)。

在jdk1.6_10中它沒有被棄用,因此不需要替代方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM