模块 java.base

枚举类枚举类 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
  • 枚举常量详细信息

    • 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
  • 方法详情

    • values

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

      public static TimeUnit  valueOf(String  name)
      返回具有指定名称的此类的枚举常量。字符串必须匹配确切地用于在此类中声明枚举常量的标识符。 (不允许使用无关的空白字符。)
      参数:
      name - 要返回的枚举常量的名称。
      返回:
      具有指定名称的枚举常量
      抛出:
      IllegalArgumentException - 如果此枚举类没有具有指定名称的常量
      NullPointerException - 如果参数为空
    • 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)
      将给定的持续时间转换为此单位。

      对于任何 TimeUnit 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 为空
      自从:
      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
    • 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
    • of

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