为什么TimeUnit是java.util.concurrent的成员?

cnn*_*nnr 12 java

Java的TimeUnit枚举对许多与时间相关的不同任务很有用,而不仅仅是并发; 和其他与时间相关的课程Date是其中的一部分java.util.那么为什么TimeUnit会员java.util.concurrent呢?

ass*_*ias 5

它可能是由于历史原因而存在的:

  • 遗留日期 API 在过去几年中没有太大变化
  • TimeUnit 广泛用于并发实用程序

有趣的是,在Java 8中的新日期API有一个ChronoUnit枚举,其类似于TimeUnit枚举,但适用于日期和时间。特别是, aChronoUnit可以转换为 a Duration


joe*_*ews 3

除了提供处理不同时间粒度的方法外,TimeUnit 还提供线程感知方法,例如timedJoin

public void timedJoin(Thread thread, long timeout) throws InterruptedException

我认为该类最初是为了帮助完成常见的并发编程任务,例如延迟执行。目前它有两个不同的功能(管理时间粒度;将时间概念应用于线程问题),这违反了单一职责原则

考虑到 TimeUnit 在并发代码之外的实用性和流行性,一个更简洁的解决方案可能是java.util.TimeUnit管理时间粒度的枚举和java.util.concurrent线程中应用程序的单独类。