Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么TimeUnit是java.util.concurrent的成员?_Java - Fatal编程技术网

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

为什么TimeUnit是java.util.concurrent的成员?,java,Java,Java的TimeUnitenum对于许多与时间相关的不同任务都很有用,而不仅仅是并发性;其他与时间相关的类,如Date是java.util的一部分。那么为什么TimeUnit是java.util.concurrent的成员呢?我认为这更像是一个设计决策。他们在需要并发时添加了它。因此,他们把它放在并发包下。是的,即使不涉及并发性,我们也可以使用它。但这在并发应用程序中是必需的。嗯,我可能错了 “A表示给定粒度单位的持续时间,并提供跨单位转换的实用方法,以及在这些单位中执行计时和延迟操作的实用方

Java的
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。