Java のTimeUnit
enum は、同時実行性だけでなく、時間に関連するさまざまなタスクに役立ちます。のような他の時間関連のクラスDate
は の一部ですjava.util
。では、なぜTimeUnit
のメンバーなのjava.util.concurrent
ですか?
5 に答える
それはおそらく歴史的な理由からそこにあります:
- 過去数年間、従来の日付 API はあまり進化していません
TimeUnit
同時実行ユーティリティで広く使用されています
興味深いことに、Java 8 の新しい日付 API には、ChronoUnit
列挙型に似た列挙型がありTimeUnit
ますが、日付と時刻に適用されます。特に、 aChronoUnit
は に変換できますDuration
。
TimeUnit
は、主に同時実行ユーティリティのために同時実行エキスパート グループによって開発されました。java.
このようなライブラリは、多くの場合、既存の JVM でのテストを可能にするために ...パッケージ以外の典型的なサードパーティ パッケージを使用して開発されます。後で、パッケージの名前を変更することで統合されます。だから、それは主に歴史的な理由です。
私はそれが設計上の決定であると信じています。並行性のために必要なときに追加しました。したがって、彼らはそれを並行パッケージの下に置きました。はい、並行性が関係していない場合でも使用できます。しかし、並行アプリケーションでは必要でした。まあ、私は間違っている可能性があります。
「TimeUnitは、特定の粒度単位で期間を表し、単位間で変換し、これらの単位でタイミングと遅延操作を実行するためのユーティリティ メソッドを提供します。」
これは、並行処理のための直感的なコードを書きたかったためだと思います。TimeUnit
JavaDoc は次のように述べています。
TimeUnit は主に、時間ベースのメソッドに特定のタイミング パラメーターを解釈する方法を通知するために使用されます。たとえば、ロックが利用できない場合、次のコードは 50 ミリ秒でタイムアウトします。
Lock lock = ...; if (lock.tryLock(50L, TimeUnit.MILLISECONDS)) ...
それで、彼らは Lock クラスを書いていて、そのような時間を指定する方法を望んでいたと思います。そのため、TimeUnit
当初は Lock コードと友人のためにのみ使用することを意図した補助クラスを作成しました。時間が経つにつれて、おそらく一般的な目的で悪用されました。
の JavaDoc は次のようにjava.util.concurrent
述べています。
並行プログラミングで一般的に役立つユーティリティ クラス。