17


9

java.util.Timer:非推奨ですか?

https://stackoverflow.com/questions/2212848/how-to-genarate-random-numbers/2212887#2212887 [この回答]へのコメントと、スケジュールに関する他の多くの質問(申し訳ありませんが、参照なし)を読んでいますjava.util.Timer`は非推奨です。 Javaで物事をスケジュールするための軽い方法として使用しているので、そうしないことを本当に望んでいます(そしてうまく動作します)。 しかし、もしそれが非推奨であるなら、私は他の場所を調べます。 ただし、http://java.sun.com/javase/6/docs/api/ [1.6のAPIドキュメント]をざっと見ても、廃止されることについては何も言われていません。 Sunのhttpでも言及されていません。 ://java.sun.com/javase/6/docs/api/deprecated-list.html [非推奨リスト]。

公式に非推奨になっています^ * ^その場合、代わりに何を使用すればよいですか?

'' '' '

^ * ^一方、非推奨でない場合、この無邪気で見事に実装されたset-o-classesの悪口を止めることはできますか?

6 Answer


15


他の人が言及したように、それは非推奨ではありませんが、私は常にhttp://java.sun.com/javase/6/docs/api/java/util/concurrent/ScheduledExecutorService.html [ScheduledExecutorService]を代わりに使用しますより豊富なAPIと柔軟性を提供します。

  • `ScheduledExecutorService`を使用すると、スレッドの数を指定できます 一方、「タイマー」は常に単一のスレッドを使用します。

  • ScheduledExecutorService`は http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadFactory.html [`ThreadFactory]は、名前/デーモンステータス以外のスレッドの側面を制御できるようにします(例: 優先度、「ThreadGroup」、「UncaughtExceptionHandler」)。

  • `ScheduledExecutorService`を使用すると、タスクを固定してスケジュールできます 遅延と固定レート。

  • ScheduledExecutorService`は Callable` / `Runnable`をそのまま受け入れます 作業単位。つまり、特に使用するために `TimerTask`をサブクラス化する必要はありません。つまり 同じ「Callable」実装を通常の「ExecutorService」または「ScheduledExecutorService」に送信できます。


7


これは誤解だと思います。 TimerクラスのJavaDocは `ScheduledThreadPoolExecutor`に言及しており、このクラスはTimer / TimerTaskの組み合わせの「より効果的な汎用性のある置換」であることに注意してください。 他に何もない。 タイマーは非推奨ではありません。

今回のJavaDocからの別の引用、ScheduledThreadPoolExecutor:

_ 所定の遅延後に実行するコマンド、または定期的に実行するコマンドをさらにスケジュールできるThreadPoolExecutor。 複数のワーカースレッドが必要な場合、またはThreadPoolExecutorの追加の柔軟性または機能(このクラスが拡張する)が必要な場合、このクラスはTimerよりも望ましいです。 _


6


No. すべてではない。 より複雑なタイマー要件には、http://www.quartz-scheduler.org/ [Quartz]のような他のメカニズムを使用することもできますが、Timerは完全に機能し、どこにも行きません。


4


いいえ、廃止されていません。 Sunのhttp://java.sun.com/javase/6/docs/api/deprecated-list.html[Deprecated List]に加えて、JavaDocには非推奨となったクラスに関するメモも表示されます。 たとえば、http://java.sun.com/javase/6/docs/api/java/io/StringBufferInputStream.html [StringBufferInputStream]の注意事項は次のとおりです。

_ 廃止予定です。 このクラスは、文字をバイトに適切に変換しません。 JDK 1.1以降、文字列からストリームを作成する好ましい方法は、StringReaderクラスを使用することです。 _


4


[JDK-8154799 deprecate Timer and TimerTask] in the JDK’s bug tracker and mid-2016 http://openjdk.java.net/ jeps / 277 [JEP 277]は、「java.util.Timer」(および「TimerTask」)はJDK 9で非推奨になると述べました。

_ _ いくつかのJava SE APIには、@ Deprecatedアノテーションが追加、更新、または削除されます。 そのような変更のいくつかの例を以下に示します。

{空の}[…]

  • @Deprecatedを java.util.Timer`と TimerTask`に追加します _ _

ただし、JDK 9リリースでは、これらのクラスは非推奨ではありません(非推奨クラスはhttp://download.java.net/java/jdk9/docs/api/deprecated-list.html#class [非推奨リスト]にあります。 )。


2


jdk1.6_10では非推奨ではないため、代替の必要はありません。