java并发之TimeUnit,代替 TimeUnit.sleep()

java并发之TimeUnit,代替 TimeUnit.sleep()

TimeUnit是java.util.concurrent包下面的一个类,TimeUnit提供了可读性更好的线程暂停操作,通常用来替换Thread.sleep().

在很长一段时间里Thread的sleep()方法作为暂停线程的标准方式。

Thread.sleep() 可读性差

Thread.sleep()方法:

Thread.sleep(2400000

对于大多数程序员来说这种写法的可读性很差的,你需要把毫秒转换成秒和分。

Thread.sleep(4*60*1000);

这比前面那个例子已经好多了,但是仍然不是最好的,你注意到睡眠时间用毫秒,不容易猜出当前线程将等待4分钟。

TimeUnit类解决了这个问题,通过指定DAYS、HOURS、MINUTES,SECONDS、MILLISECONDS和NANOSECONDS。

用TimeUnit写线程睡眠4分钟:

TimeUnit.MINUTES.sleep(4);  // sleeping for 4 minutes

类似你可以采用秒、分、小时级别来暂停当前线程。你可以看到这比Thread的sleep方法的可读的好多了。

为什么对TimeUnit并不太熟悉

两个原因:
一是对比Thread.sleep(),TimeUnit不是很常用,
二是在它不在Thread类中,就像wait和notify同样不是在Thread中,反正这些需要一段时间才能被采用,并成为一个标准的方式。

TimeUnit 常用的颗粒度

TimeUnit.DAYS 日的工具类 
TimeUnit.HOURS 时的工具类 
TimeUnit.MINUTES 分的工具类 
TimeUnit.SECONDS 秒的工具类 
TimeUnit.MILLISECONDS 毫秒的工具类

TimeUnit.SECONDS.sleep( 5 );    //延时5秒

**
TimeUnit 时间颗粒度转换 **

TimeUnit.SECONDS.toMillis(1)     // 1秒转换为毫秒数 
TimeUnit.SECONDS.toMinutes(60)   // 60秒转换为分钟数 
TimeUnit.SECONDS.sleep(5)        // 线程休眠5秒 
TimeUnit.SECONDS.convert(1, TimeUnit.MINUTES)   // 1分钟转换为秒数 

import java.util.concurrent.TimeUnit;  
  
public class Test {  
  
    public static void main(String[] args) {  

        //1天有24个小时    1代表1天:将1天转化为小时  
        System.out.println( TimeUnit.DAYS.toHours( 1 ) );            
        //结果: 24          
  
        //1小时有3600秒  
        System.out.println( TimeUnit.HOURS.toSeconds( 1 ));            
        //结果3600          
          
        //把3天转化成小时  
        System.out.println( TimeUnit.HOURS.convert( 3 , TimeUnit.DAYS ) );  
        //结果是:72  
    }  
}  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值