TimeUnit

1. TimeUnit枚举

  • java.utils.concurrent.TimeUnit 是Java枚举应用场景中最好的例子之一

  • 枚举指定DAYS、HOURS、MINUTES,SECONDS、MILLISECONDS(毫秒)、NANOSECONDS(纳妙)

2. 可读性

  • 使用TimeUnit代替传统Thread.sleep()将当前线程暂停

    // 睡眠毫秒数,可读性非常差,不知道方法单位的情况下无法分辨
    Thread.sleep(2400000;
    
    // 使用TimeUnit的枚举非常容易分辨是睡眠4分钟
    TimeUnit.MINUTES.sleep(4); 
    

3. 转换时间单位

  • 时间转换的两种方式
TimeUnit.SECONDS.toMillis(1) 1秒转换为毫秒数 
TimeUnit.SECONDS.toMinutes(60) 60秒转换为分钟数 
TimeUnit.SECONDS.toMicros(1) 1秒转换为微秒数(1毫秒 = 1000微妙)
TimeUnit.SECONDS.toNanos(1) 1秒转换为纳秒数 (1微妙 = 1000纳秒)
 
TimeUnit.SECONDS..convert(1, TimeUnit.HOURS) 1小时转换为秒数
TimeUnit.SECONDS.convert(1, TimeUnit.MINUTES) 1分钟转换为秒数
TimeUnit.SECONDS.convert(1, TimeUnit.DAYS) 1天转换为秒数

4. 锁超时判断原理

// 预设等待时间(2秒)
TimeUnit seconds = TimeUnit.SECONDS;
long nanosTimeout = seconds.toNanos(2);

// 超时时间 = 当前时间(纳秒) + 预设等待时间(纳秒)
final long deadline = System.nanoTime() + nanosTimeout;

// 是否超时 = 超时时间 - 当前时间
nanosTimeout = deadline - System.nanoTime();
if (nanosTimeout <= 0L)
	return false;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值