[英]java.util.Timer: Is it deprecated?
正如其他人所提到的,不是它不被棄用但我個人總是使用ScheduledExecutorService
因為它提供了更豐富的API和更多的靈活性:
ScheduledExecutorService
允許您指定線程數,而Timer
始終使用單個線程。 ThreadFactory
構造ScheduledExecutorService
,以允許控制除名稱/守護程序狀態之外的線程方面(例如,priority, ThreadGroup
, UncaughtExceptionHandler
)。 ScheduledExecutorService
允許以固定延遲和固定速率ScheduledExecutorService
任務。 ScheduledExecutorService
接受Callable
/ Runnable
作為它的工作單元,這意味着你不需要專門使用它來子類化TimerTask
; 即您可以將相同的Callable
實現提交給常規ExecutorService
或ScheduledExecutorService
。 我認為這是一種誤解。 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.Timer
和TimerTask
但是,在JDK 9發行版中,不會棄用這些類(不推薦使用的類可以在不推薦使用的列表中找到)。
在jdk1.6_10中它沒有被棄用,因此不需要替代方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.