Module java.base

Enum Class TimeUnit

java.lang.Object
java.lang.Enum<TimeUnit>
java.util.concurrent.TimeUnit
所有已实现的接口:
Serializable, Comparable<TimeUnit>, Constable

public enum TimeUnit extends Enum<TimeUnit>
一个TimeUnit表示给定粒度单位的时间持续时间,并提供实用方法来在单位之间进行转换,并在这些单位中执行定时和延迟操作。 TimeUnit不维护时间信息,而只是帮助组织和使用可能在各种上下文中单独维护的时间表示。 纳秒被定义为微秒的千分之一,微秒被定义为毫秒的千分之一,毫秒被定义为秒的千分之一,分钟被定义为六十秒,小时被定义为六十分钟,一天被定义为二十四小时。

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

 
 Lock lock = ...;
 if (lock.tryLock(50L, TimeUnit.MILLISECONDS)) ...
而此代码将在50秒后超时:
 
 Lock lock = ...;
 if (lock.tryLock(50L, TimeUnit.SECONDS)) ...
但请注意,并不能保证特定的超时实现能够以与给定TimeUnit相同的粒度注意到时间的流逝。
自版本:
1.5
  • Enum Constant Details

    • NANOSECONDS

      public static final TimeUnit NANOSECONDS
      代表微秒的千分之一的时间单位。
    • MICROSECONDS

      public static final TimeUnit MICROSECONDS
      代表毫秒的千分之一的时间单位。
    • MILLISECONDS

      public static final TimeUnit MILLISECONDS
      代表秒的千分之一的时间单位。
    • SECONDS

      public static final TimeUnit SECONDS
      代表一秒的时间单位。
    • MINUTES

      public static final TimeUnit MINUTES
      代表六十秒的时间单位。
      自版本:
      1.6
    • HOURS

      public static final TimeUnit HOURS
      代表六十分钟的时间单位。
      自版本:
      1.6
    • DAYS

      public static final TimeUnit DAYS
      代表二十四小时的时间单位。
      自版本:
      1.6
  • Method Details

    • values

      public static TimeUnit[] values()
      返回包含此枚举类的常量的数组,按声明顺序排列。
      返回:
      包含此枚举类的常量的数组,按声明顺序排列
    • valueOf

      public static TimeUnit valueOf(String name)
      返回具有指定名称的此类的枚举常量。 字符串必须与在此类中声明枚举常量时使用的标识符完全匹配。(不允许存在多余的空格字符。)
      参数:
      name - 要返回的枚举常量的名称。
      返回:
      具有指定名称的枚举常量
      抛出:
      IllegalArgumentException - 如果此枚举类没有具有指定名称的常量
      NullPointerException - 如果参数为null
    • convert

      public long convert(long sourceDuration, TimeUnit sourceUnit)
      将给定单位中的给定时间持续时间转换为此单位。 从更细到更粗的粒度的转换会截断,因此会丢失精度。 例如,将999毫秒转换为秒会导致0。 使用参数从更粗到更细的粒度进行转换,如果数字溢出,则会饱和为Long.MIN_VALUE(如果为负)或Long.MAX_VALUE(如果为正)。

      例如,要将10分钟转换为毫秒,请使用:TimeUnit.MILLISECONDS.convert(10L, TimeUnit.MINUTES)

      参数:
      sourceDuration - 给定sourceUnit中的时间持续时间
      sourceUnit - sourceDuration参数的单位
      返回:
      在此单位中转换后的持续时间,如果转换会负溢出,则为Long.MIN_VALUE,如果转换会正溢出,则为Long.MAX_VALUE
    • convert

      public long convert(Duration duration)
      将给定时间持续时间转换为此单位。

      对于任何unitunit.convert(Duration.ofNanos(n))等同于unit.convert(n, NANOSECONDS)unit.convert(Duration.of(n, unit.toChronoUnit()))等同于n(在没有溢出的情况下)。

      API注释:
      此方法与Duration.toNanos()不同,因为它在数字溢出时不会抛出ArithmeticException
      参数:
      duration - 时间持续时间
      返回:
      在此单位中转换后的持续时间,如果转换会负溢出,则为Long.MIN_VALUE,如果转换会正溢出,则为Long.MAX_VALUE
      抛出:
      NullPointerException - 如果duration为null
      自版本:
      11
      参见:
    • toNanos

      public long toNanos(long duration)
      参数:
      duration - 持续时间
      返回:
      转换后的持续时间,如果转换会负溢出,则为Long.MIN_VALUE,如果转换会正溢出,则为Long.MAX_VALUE
    • toMicros

      public long toMicros(long duration)
      参数:
      duration - 持续时间
      返回:
      转换后的持续时间,如果转换会负溢出,则为Long.MIN_VALUE,如果转换会正溢出,则为Long.MAX_VALUE
    • toMillis

      public long toMillis(long duration)
      参数:
      duration - 持续时间
      返回:
      转换后的持续时间,如果转换会负溢出,则为Long.MIN_VALUE,如果转换会正溢出,则为Long.MAX_VALUE
    • toSeconds

      public long toSeconds(long duration)
      参数:
      duration - 持续时间
      返回:
      转换后的持续时间,如果转换会负溢出,则为Long.MIN_VALUE,如果转换会正溢出,则为Long.MAX_VALUE
    • toMinutes

      public long toMinutes(long duration)
      参数:
      duration - 持续时间
      返回:
      转换后的持续时间,如果转换会负溢出,则为Long.MIN_VALUE,如果转换会正溢出,则为Long.MAX_VALUE
      自版本:
      1.6
    • toHours

      public long toHours(long duration)
      参数:
      duration - 持续时间
      返回:
      转换后的持续时间,如果转换会负溢出,则为Long.MIN_VALUE,如果转换会正溢出,则为Long.MAX_VALUE
      自版本:
      1.6
    • toDays

      public long toDays(long duration)
      参数:
      duration - 持续时间
      返回:
      转换后的持续时间
      自1.6版本起:
      1.6
    • timedWait

      public void timedWait(Object obj, long timeout) throws InterruptedException
      使用此时间单位执行定时的Object.wait。这是一个方便的方法,将超时参数转换为Object.wait方法所需的形式。

      例如,您可以实现一个阻塞的poll方法(参见BlockingQueue.poll):

       
       public E poll(long timeout, TimeUnit unit)
           throws InterruptedException {
         synchronized (lock) {
           while (isEmpty()) {
             unit.timedWait(lock, timeout);
             ...
           }
         }
       }
      参数:
      obj - 等待的对象
      timeout - 最长等待时间。如果小于或等于零,则根本不等待。
      抛出:
      InterruptedException - 在等待时被中断
    • timedJoin

      public void timedJoin(Thread thread, long timeout) throws InterruptedException
      使用此时间单位执行定时的Thread.join。这是一个方便的方法,将时间参数转换为Thread.join方法所需的形式。
      参数:
      thread - 等待的线程
      timeout - 最长等待时间。如果小于或等于零,则根本不等待。
      抛出:
      InterruptedException - 在等待时被中断
    • sleep

      public void sleep(long timeout) throws InterruptedException
      使用此时间单位执行Thread.sleep。这是一个方便的方法,将时间参数转换为Thread.sleep方法所需的形式。
      参数:
      timeout - 最短休眠时间。如果小于或等于零,则根本不休眠。
      抛出:
      InterruptedException - 在休眠时被中断
    • toChronoUnit

      public ChronoUnit toChronoUnit()
      将此TimeUnit转换为等效的ChronoUnit
      返回:
      转换后的等效ChronoUnit
      自9版本起:
      9
    • of

      public static TimeUnit of(ChronoUnit chronoUnit)
      ChronoUnit转换为等效的TimeUnit
      参数:
      chronoUnit - 要转换的ChronoUnit
      返回:
      转换后的等效TimeUnit
      抛出:
      IllegalArgumentException - 如果chronoUnit没有等效的TimeUnit
      NullPointerException - 如果chronoUnit为null
      自9版本起:
      9