为什么TimeUnit是java.util.concurrent的成员?
Java的为什么TimeUnit是java.util.concurrent的成员?,java,Java,Java的TimeUnitenum对于许多与时间相关的不同任务都很有用,而不仅仅是并发性;其他与时间相关的类,如Date是java.util的一部分。那么为什么TimeUnit是java.util.concurrent的成员呢?我认为这更像是一个设计决策。他们在需要并发时添加了它。因此,他们把它放在并发包下。是的,即使不涉及并发性,我们也可以使用它。但这在并发应用程序中是必需的。嗯,我可能错了 “A表示给定粒度单位的持续时间,并提供跨单位转换的实用方法,以及在这些单位中执行计时和延迟操作的实用方
TimeUnit
enum对于许多与时间相关的不同任务都很有用,而不仅仅是并发性;其他与时间相关的类,如Date
是java.util
的一部分。那么为什么TimeUnit
是java.util.concurrent
的成员呢?我认为这更像是一个设计决策。他们在需要并发时添加了它。因此,他们把它放在并发包下。是的,即使不涉及并发性,我们也可以使用它。但这在并发应用程序中是必需的。嗯,我可能错了
“A表示给定粒度单位的持续时间,并提供跨单位转换的实用方法,以及在这些单位中执行计时和延迟操作的实用方法。”我猜这是因为他们想编写直观的并发代码。
TimeUnit
JavaDoc表示:
时间单位主要用于通知基于时间的方法如何解释给定的计时参数。例如,如果锁不可用,以下代码将在50毫秒后超时:
Lock lock = ...;
if (lock.tryLock(50L, TimeUnit.MILLISECONDS)) ...
所以,我猜他们是在编写Lock类,并且想要这样一种指定时间的方法。出于这个原因,他们创建了一个辅助类TimeUnit
,最初只用于他们的锁码和朋友。随着时间的推移,它可能会被滥用的一般目的
java.util.concurrent
的JavaDoc说明:
在并发编程中常用的实用程序类
TimeUnit
主要由并发专家组为并发实用程序开发。这些库通常是使用java之外的典型第三方包开发的。
。。。允许使用现有JVM进行测试的包。之后,通过重命名包将它们集成在一起。这主要是历史原因。除了提供处理不同时间粒度的方法外,TimeUnit还提供了线程感知方法,如:
public void timedJoin(线程,
长超时)
抛出中断异常
我认为这个类是为了帮助处理常见的并发编程任务,比如延迟执行。目前,它有两个不同的功能(管理时间粒度;将时间概念应用于线程问题),这违反了
考虑到并发代码之外的时间单位的实用性和流行性,一个更简洁的解决方案可以是一个
java.util.TimeUnit
enum来管理时间粒度,以及一个单独的java.util.concurrent
类,用于线程中的应用程序。可能是出于历史原因:
- 遗留日期API在过去几年中没有太大的发展
广泛应用于并发实用程序中TimeUnit
有趣的是,Java8中新的DateAPI有一个类似于
TimeUnit
enum的函数,但应用于日期和时间。特别是,ChronoUnit
可以转换为Duration
我认为引入它是为了更容易地调用Condition.wait()
等方法。因为它是在添加一些新的nio并发时添加的,因此在该包中。虽然它确实是一个很好的时间枚举,用于一般的时间,比如日历,但您应该使用Joda。