【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
https://blog.csdn.net/m0_69908381/article/details/134106510
出自【进步*于辰的博客】
1、概述
继承关系:
- java.lang.Object
- java.lang.Enum
<TimeUnit>
- java.util.concurrent.TimeUnit
- java.lang.Enum
所有已实现的接口:
Serializable、Comparable<TimeUnit>
public enum TimeUnitextends 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
2、常量摘要
static final long C0 = 1L;
static final long C1 = C0 * 1000L;
static final long C2 = C1 * 1000L;
static final long C3 = C2 * 1000L;
static final long C4 = C3 * 60L;
static final long C5 = C4 * 60L;
static final long C6 = C5 * 24L;
static final long MAX = Long.MAX_VALUE;
显而易见,这些常量是时间刻度。
3、枚举常量摘要
3.1 概况
单位:天。
DAYS {
public long toNanos(long d) { return x(d, C6/C0, MAX/(C6/C0)); }
public long toMicros(long d) { return x(d, C6/C1, MAX/(C6/C1)); }
public long toMillis(long d) { return x(d, C6/C2, MAX/(C6/C2)); }
public long toSeconds(long d) { return x(d, C6/C3, MAX/(C6/C3)); }
public long toMinutes(long d) { return x(d, C6/C4, MAX/(C6/C4)); }
public long toHours(long d) { return x(d, C6/C5, MAX/(C6/C5)); }
public long toDays(long d) { return d; }
public long convert(long d, TimeUnit u) { return u.toDays(d); }
int excessNanos(long d, long m) { return 0; }
};
单位:小时。
HOURS {
public long toNanos(long d) { return x(d, C5/C0, MAX/(C5/C0)); }
public long toMicros(long d) { return x(d, C5/C1, MAX/(C5/C1)); }
public long toMillis(long d) { return x(d, C5/C2, MAX/(C5/C2)); }
public long toSeconds(long d) { return x(d, C5/C3, MAX/(C5/C3)); }
public long toMinutes(long d) { return x(d, C5/C4, MAX/(C5/C4)); }
public long toHours(long d) { return d; }
public long toDays(long d) { return d/(C6/C5); }
public long convert(long d, TimeUnit u) { return u.toHours(d); }
int excessNanos(long d, long m) { return 0; }
},
单位:分。
MINUTES {
public long toNanos(long d) { return x(d, C4/C0, MAX/(C4/C0)); }
public long toMicros(long d) { return x(d, C4/C1, MAX/(C4/C1)); }
public long toMillis(long d) { return x(d, C4/C2, MAX/(C4/C2)); }
public long toSeconds(long d) { return x(d, C4/C3, MAX/(C4/C3)); }
public long toMinutes(long d) { return d; }
public long toHours(long d) { return d/(C5/C4); }
public long toDays(long d) { return d/(C6/C4); }
public long convert(long d, TimeUnit u) { return u.toMinutes(d); }
int excessNanos(long d, long m) { return 0; }
},
单位:秒。
SECONDS {
public long toNanos(long d) { return x(d, C3/C0, MAX/(C3/C0)); }
public long toMicros(long d) { return x(d, C3/C1, MAX/(C3/C1)); }
public long toMillis(long d) { return x(d, C3/C2, MAX/(C3/C2)); }
public long toSeconds(long d) { return d; }
public long toMinutes(long d) { return d/(C4/C3); }
public long toHours(long d) { return d/(C5/C3); }
public long toDays(long d) { return d/(C6/C3); }
public long convert(long d, TimeUnit u) { return u.toSeconds(d); }
int excessNanos(long d, long m) { return 0; }
},
单位:毫秒。
MILLISECONDS {
public long toNanos(long d) { return x(d, C2/C0, MAX/(C2/C0)); }
public long toMicros(long d) { return x(d, C2/C1, MAX/(C2/C1)); }
public long toMillis(long d) { return d; }
public long toSeconds(long d) { return d/(C3/C2); }
public long toMinutes(long d) { return d/(C4/C2); }
public long toHours(long d) { return d/(C5/C2); }
public long toDays(long d) { return d/(C6/C2); }
public long convert(long d, TimeUnit u) { return u.toMillis(d); }
int excessNanos(long d, long m) { return 0; }
},
单位:微秒。
MICROSECONDS {
public long toNanos(long d) { return x(d, C1/C0, MAX/(C1/C0)); }
public long toMicros(long d) { return d; }
public long toMillis(long d) { return d/(C2/C1); }
public long toSeconds(long d) { return d/(C3/C1); }
public long toMinutes(long d) { return d/(C4/C1); }
public long toHours(long d) { return d/(C5/C1); }
public long toDays(long d) { return d/(C6/C1); }
public long convert(long d, TimeUnit u) { return u.toMicros(d); }
int excessNanos(long d, long m) { return (int)((d*C1) - (m*C2)); }
},
单位:纳秒。
NANOSECONDS {
public long toNanos(long d) { return d; }
public long toMicros(long d) { return d/(C1/C0); }
public long toMillis(long d) { return d/(C2/C0); }
public long toSeconds(long d) { return d/(C3/C0); }
public long toMinutes(long d) { return d/(C4/C0); }
public long toHours(long d) { return d/(C5/C0); }
public long toDays(long d) { return d/(C6/C0); }
public long convert(long d, TimeUnit u) { return u.toNanos(d); }
int excessNanos(long d, long m) { return (int)(d - (m*C2)); }
},
3.2 说明
这些常量就是不同的时间单位,其内方法的底层逻辑就是通过时间单位间换算关系对指定“时间”进行转换。
4、方法摘要
4.1 long convert(long duration, TimeUnit unit)
将给定单元的时间段转换到此单元。
4.2 void sleep(long timeout)
使用此单元执行 Thread.sleep.这是将时间参数转换为 Thread.sleep 方法所需格式的便捷方法。
public voidsleep(long timeout) throws InterruptedException {
if (timeout > 0) {
long ms = toMillis(timeout);
int ns = excessNanos(timeout, ms);
Thread.sleep(ms, ns);
}
}
后续解析。
4.3 void timedJoin(Thread thread, long timeout)
使用此时间单元执行计时的 Thread.join()
。
public void timedJoin(Thread thread, long timeout)
throws InterruptedException {
if (timeout > 0) {
long ms = toMillis(timeout);
int ns = excessNanos(timeout, ms);
thread.join(ms, ns);
}
}
后续解析。
4.4 void timedWait(Object obj, long timeout)
使用此时间单元执行计时的 Object.wait()
。
public void timedWait(Object obj, long timeout)
throws InterruptedException {
if (timeout > 0) {
long ms = toMillis(timeout);
int ns = excessNanos(timeout, ms);
obj.wait(ms, ns);
}
}
后续解析。
4.5 long toMicros(long duration)
等效于 MICROSECONDS.convert(duration, this)
。
4.6 long toMillis(long duration)
等效于 MILLISECONDS.convert(duration, this)
。
4.7 long toNanos(long duration)
等效于 NANOSECONDS.convert(duration, this)
。
4.8 long toSeconds(long duration)
等效于 SECONDS.convert(duration, this)
。
4.9 static TimeUnit valueOf(String name)
返回带有指定名称的该类型的枚举常量 。
4.10 static TimeUnit[] values()
按照声明该枚举类型的常量的顺序,返回包含这些常量的数组。
4.11 说明
此类的所有toXX()
的业务都是通过时间单位间换算关系进行时间转换。
示例。
TimeUnit unit = TimeUnit.MINUTES;
unit.toNanos(1);// 换算成纳秒,60000000000
unit = TimeUnit.SECONDS;
unit.toNanos(1);// 1000000000
5、方法摘要(不开放)
5.1 static long x(long d, long m, long over)
“时间”换算。
static long x(long d, long m, long over) {
if (d >over) return Long.MAX_VALUE;
if (d < -over) return Long.MIN_VALUE;
return d * m;
}
最后
如果大家需要Java-API文档,我上传了《Java-API文档-包含5/8/11三个版本》。文章来源:https://www.toymoban.com/news/detail-715509.html
本文暂缓更新。文章来源地址https://www.toymoban.com/news/detail-715509.html
到了这里,关于Java-API简析_java.io.FilterOutputStream类(基于 Latest JDK)(浅析源码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!