栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Thread.sleep() 和 TimeUnit.SECONDS.sleep() 该如何选择?

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Thread.sleep() 和 TimeUnit.SECONDS.sleep() 该如何选择?

前言

  前两天在研究线程的时候发现了一个比较好用的类 TimeUnit 类,今天来记录一下和 Thread.sleep() 的区别,同时也是为了我们另一篇文章做了一些铺垫

正文

  Thread.sleep() 和 TimeUnit.SECONDS.sleep() 的不同点
    前者这个就不用多说了吧,是 Thread 类的一个静态方法,作用:使当前线程休眠,进入阻塞状态(暂停执行),简单理解就是“线程暂停方法”,而 TimeUnit.SECONDS.sleep() 是 concurrent 包下的一个类,提供了可读性更好的线程暂停操作
  优劣比较:后者相较于前者来讲,可读性提升了,还增加了一个时间转换的方法

为什么要说后者比前者的可读性高呢?

  因为 Thread.sleep() 是一个重载方法,可以接收长整形毫秒和整型纳秒(讲真的有时候,换算时间就要半天,尤其是新手写的时候,不太友好)

  举个例子来讲:方法一的代码,第一眼看上去你能知道这是多少分钟么?或者使用方法二的代码(某种意义上来讲可读性增加了一点点)

// 方法一
Thread.sleep(2400000);  
// 方法二 
Thread.sleep(4 * 60 * 1000); 

  而 TimeUnit.SECONDS.sleep() 就不一样了!他提供了很多的枚举类(具体类请查看下方表格,这个地方我们就不看源码截图了,太长!),还提供了时间转化方法

// 睡眠一天
TimeUnit.DAYS.sleep(1);
// 睡眠一小时
TimeUnit.HOURS.sleep(1);
// 睡眠一分钟
TimeUnit.MINUTES.sleep(1);
// 睡眠一秒钟
TimeUnit.SECONDS.sleep(1);

  例如:秒转换成毫秒,可以这样写

TimeUnit.SECONDS.toMillis(44)

  其他类型转换

枚举类参数表:

名称单位
DAYS
HOURS小时
MINUTES分钟
SECONDS
MILLISECONDS毫秒(千分之一秒)
MICROSECONDS微秒(一百万分之一秒(就是毫秒/1000))
NANOSECONDS毫微秒(十亿分之一秒(就是微秒/1000))

  补充:不管是 Thread.sleep() 还是 TimeUnit 一定要抛出异常块(InterruptedException)如果参数值为负数或者等待中被打断都会进入此异常块

总结

  Thread.sleep() 唯一一个让我退缩的点可能就是时间转换了,毕竟有了更简便的 TimeUnit 衬托,所以我比较倾向于 TimeUnit 类,可能写的有点表面了,后面有时间再深度研究一下,先记录一下

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/602038.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号