TimeUnit是什么?

TimeUnit是java.util.concurrent包下面的一个类,TimeUnit提供了可读性更好的线程暂停操作,通常用来替换Thread.sleep(),在很长一段时间里Thread的sleep()方法作为暂停线程的标准方式,几乎所有Java程序员都熟悉它,事实上sleep方法本身也很常用而且出现在很多面试中。如果你已经使用过Thread.sleep(),当然我确信你这样做过,那么你一定熟知它是一个静态方法,暂停线程时它不会释放锁,该方法会抛出InterrupttedException异常(如果有线程中断了当前线程)。但是我们很多人并没有注意的一个潜在的问题就是它的可读性。Thread.sleep()是一个重载方法,可以接收长整型毫秒和长整型的纳秒参数,这样对程序员造成的一个问题就是很难知道到底当前线程是睡眠了多少秒、分、小时或者天。看看下面这个Thread.sleep()方法:

1
Thread.sleep(2400000

粗略一看,你能计算出当前线程是等待多长时间吗?可能有些人可以,但是对于大多数程序员来说这种写法的可读性还是很差的,你需要把毫秒转换成秒和分,让我们来看看另外一个例子,这个例子比前面那个例子可读性稍微好一点:

1
Thread.sleep(4*60*1000);

这比前面那个例子已经好多了,但是仍然不是最好的,你注意到睡眠时间用毫秒,不容易猜出当前线程将等待4分钟。TimeUnit类解决了这个问题,通过指定DAYS、HOURS、MINUTES,SECONDS、MILLISECONDS和NANOSECONDS。java.utils.concurrent .TimeUnit 是Java枚举应用场景中最好的例子之一,所有TimeUnit都是枚举实例,让我们来看看线程睡眠4分钟用TimeUnit是如何使用的。

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

类似你可以采用秒、分、小时级别来暂停当前线程。你可以看到这比Thread的sleep方法的可读的好多了。记住TimeUnit.sleep()内部调用的Thread.sleep()也会抛出InterruptException。你也可以查看JDK源代码去验证一下。下面是一个简单例子,它展示如果使用TimeUnit.sleep()方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
 *
 * Java program to demonstrate how to use TimeUnit.sleep() method in Java.
 * TimeUnit is a new way of introducing pause in Java program.
 * @author Javin
 */
public class TimeUnitTest {
    public static void main(String args[]) throws InterruptedException {
        System.out.println("Sleeping for 4 minutes using Thread.sleep()");
        Thread.sleep(4 * 60 * 1000);
        System.out.println("Sleeping for 4 minutes using TimeUnit sleep()");
        TimeUnit.SECONDS.sleep(4);
        TimeUnit.MINUTES.sleep(4);
        TimeUnit.HOURS.sleep(1);
        TimeUnit.DAYS.sleep(1);
    }
}

除了sleep的功能外,TimeUnit还提供了便捷方法用于把时间转换成不同单位,例如,如果你想把秒转换成毫秒,你可以使用下面代码:

1
TimeUnit.SECONDS.toMillis(44)

它将返回44,000

TimeUnit vs Thread.sleep()

目前我们讨论使用TimeUnit的好处是提高了可读性,但是有时候觉得其他方法更好,因为Thread.sleep()伴随java很早就出现了,几乎所有程序员都知道Thread.sleep(),都知道是将当前线程暂停,而对TimeUnit并不太熟悉。两个原因:一是对比起Thread.sleep(),TimeUnit不是很常用,第二是在它不在Thread类中,就像wait和notify同样不是在Thread中,反正这些需要一段时间才能被采用,并成为一个标准的方式。

总结来说在你想用Thread.sleep()方法的地方你最好使用TimeUnit.sleep()方法来代替。它不尽可以提高代码的可读性而且能更加熟悉java.util.concurrent包,因为TimeUnit在并发编程中也是一个关键API。

原文链接: javarevisited 翻译: ImportNew.com - 刘志军
译文链接: http://www.importnew.com/7219.html
转载请保留原文出处、译者和译文链接。]

转载于:https://www.cnblogs.com/light-rain/p/5242177.html

优先使用TimeUnit类中的sleep()(转自 ImportNew - 刘志军 翻译自 javarevisited)相关推荐

  1. java对对碰time暂停,优先使用TimeUnit类中的sleep()

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

  2. 优先使用TimeUnit类中的sleep()

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

  3. 使用TimeUnit类中的sleep代替Thread.sleep

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

  4. TimeUnit类详解

    其类作者Doug Lea在其javadoc中写道: A TimeUnit represents time durations at a given unit of granularity and pr ...

  5. java类成员变量初始化_探讨Java类中成员变量的初始化方式

    在 Java 里定义一个类的时候,很多时候我们需要提供成员变量,成员变量专业叫法是 Memeber Variable 或者干脆的叫作 Field. 根据是否使用 static 关键字修饰,可以将 Fi ...

  6. TestNG:在一个测试类中使用@DataProvider依次运行测试

    许多Java开发人员和自动化测试工程师在他们的工作中都使用TestNG作为测试框架. 我也不例外. 这是一个显而易见的选择,因为TestNG提供了非常强大的工具集,使处理各种测试变得更加容易. 为了证 ...

  7. Thread和Object类中关于线程的相关方法

    Thread和Object类中线程的7个重要方法概览 类 方法名称 简介 Thread sleep相关 相关表示sleep所有的重载方法,参数不同,实际作用大同小异 Thread join() 等待其 ...

  8. 线程类中如何调用service_你真的了解Java多线程吗?

    一.程序.进程和线程.单核CPU和多核CPU.并行与并发 什么是程序? 程序是为完成特定任务.用某种语言编写的一组指令的集合.即指一段静态的代码. 什么是进程? 进程是指程序的一次执行过程,或是正在运 ...

  9. Shell-通过shell启动Java类中的main方法 + 通过Shell启动jar包

    文章目录 概述 shell启动Java类中的main方法 启动脚本分析 启动脚本 shell启动jar包 概述 Java程序 运行在linux主机上, 通过shell脚本启动为进程. Java程序中 ...

最新文章

  1. opengl 设置每个点的颜色_OpenGL学习笔记(四)着色器
  2. 分享一个TP5实现Create()方法的心得
  3. HDFS 常用操作分类汇总整理
  4. C指针原理(21)-C指针基础-ATT汇编
  5. 生活中处处有joke!!
  6. VTK:可视化之Visualize2DPoints
  7. Hadoop入门(二)集群安装
  8. 潘石屹接连带货 Python,要来抢我们的饭碗?
  9. redis数据库配置
  10. linux 红帽6系统下载,Red Hat Enterprise Linux 6.2 ISO 下载
  11. Sharepoint2013:在页面上显示错误信息
  12. Java猜拳小游戏(剪刀、石头、布)
  13. OpenNI XnSkeletonJointOrientation 簡單分析
  14. 配置管理工具应该具有的一般特性
  15. windows10安装dll文件
  16. 离境收心,入于虚无。
  17. Spring中的 @Lazy注解简析
  18. hdfs高可用与高拓展机制分析
  19. Kafka SASL 安全认证
  20. 地铁三号线 - 搬家故事

热门文章

  1. Wordpress 的删除和重新安装
  2. android汉字转拼音,不用第三方包
  3. 海康8300平台改造要点
  4. access violation at address 异常
  5. (二)强网杯2019[随便注]
  6. 2019武汉理工大学计算机考研经验分享
  7. 美景本天成,妙笔偶得之——“妙笔”是怎样炼成的?
  8. A1490. osu!(乔明达)
  9. 电子商务基础:中小企业建站方案和资源
  10. Python全功能测试框架pytest