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

时间:2013-10-21 21:10:56

标签: java

Java的TimeUnit枚举对许多与时间相关的不同任务非常有用,而不仅仅是并发;和其他与时间相关的类Datejava.util的一部分。那么为什么TimeUnit成为java.util.concurrent的成员?

5 个答案:

答案 0 :(得分:4)

这可能是出于历史原因:

  • 传统日期API在过去几年中没有太大的发展
  • TimeUnit广泛用于并发实用程序

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

答案 1 :(得分:3)

除了提供使用不同粒度时间的方法外,TimeUnit还提供了类似timedJoin的线程感知方法:

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

我认为该类起源于帮助执行延迟执行等常见的并发编程任务。目前它有两个不同的功能(管理时间粒度;将时间概念应用于线程问题),这违反了single responsibility principle

鉴于TimeUnit在并发代码之外的实用性和普及性,一个更简洁的解决方案可以是java.util.TimeUnit枚举来管理时间粒度,并为其在线程中的应用程序提供单独的java.util.concurrent类。

答案 2 :(得分:1)

TimeUnit主要由Concurrency专家组为并发实用程序开发。这些库通常使用java. ...包之外的典型第三方包开发,以允许使用现有JVM进行测试。稍后通过重命名包来集成它们。所以这主要是历史原因。

答案 3 :(得分:0)

我认为这更像是一个设计决定。他们在需要并发时添加了它。因此,他们将其置于并发包之下。是的,即使不涉及并发性,我们也可以使用它。但它在并发应用程序中是必需的。好吧,我错了。

“A TimeUnit表示给定粒度单位的持续时间,并提供跨单位转换的实用程序方法,以及在这些单位中执行计时和延迟操作。”

答案 4 :(得分:0)

我想这是因为他们想要编写直观的并发代码。 TimeUnit JavaDoc说:

  

TimeUnit主要用于通知基于时间的方法如何解释给定的时序参数。例如,如果锁定不可用,则以下代码将在50毫秒内超时:

   Lock lock = ...;
   if (lock.tryLock(50L, TimeUnit.MILLISECONDS)) ...

所以,我猜他们正在编写Lock类,并希望用这种方式来指定时间。出于这个原因,他们创建了一个辅助类TimeUnit,最初只打算用于他们的锁码和朋友。随着时间的推移,它可能被滥用于一般目的。

java.util.concurrent的JavaDoc说:

  

实用程序类在并发编程中通常很有用。