优先使用TimeUnit类中的sleep()
来源:互联网 发布:python ctypes 详解 编辑:程序博客网 时间:2024/06/06 17:37
TimeUnit是什么?
TimeUnit是java.util.concurrent包下面的一个类,TimeUnit提供了可读性更好的线程暂停操作,通常用来替换Thread.sleep(),在很长一段时间里Thread的sleep()方法作为暂停线程的标准方式,几乎所有Java程序员都熟悉它,事实上sleep方法本身也很常用而且出现在很多面试中。如果你已经使用过Thread.sleep(),当然我确信你这样做过,那么你一定熟知它是一个静态方法,暂停线程时它不会释放锁,该方法会抛出InterrupttedException异常(如果有线程中断了当前线程)。但是我们很多人并没有注意的一个潜在的问题就是它的可读性。Thread.sleep()是一个重载方法,可以接收长整型毫秒和长整型的纳秒参数,这样对程序员造成的一个问题就是很难知道到底当前线程是睡眠了多少秒、分、小时或者天。看看下面这个Thread.sleep()方法:
Thread.sleep(2400000)
粗略一看,你能计算出当前线程是等待多长时间吗?可能有些人可以,但是对于大多数程序员来说这种写法的可读性还是很差的,你需要把毫秒转换成秒和分,让我们来看看另外一个例子,这个例子比前面那个例子可读性稍微好一点:
Thread.sleep(4*60*1000);
这比前面那个例子已经好多了,但是仍然不是最好的,你注意到睡眠时间用毫秒,不容易猜出当前线程将等待4分钟。TimeUnit类解决了这个问题,通过指定DAYS、HOURS、MINUTES,SECONDS、MILLISECONDS和NANOSECONDS。java.utils.concurrent .TimeUnit 是Java枚举应用场景中最好的例子之一,所有TimeUnit都是枚举实例,让我们来看看线程睡眠4分钟用TimeUnit是如何使用的。
TimeUnit.MINUTES.sleep(4); // sleeping for 4 minutes
类似你可以采用秒、分、小时级别来暂停当前线程。你可以看到这比Thread的sleep方法的可读的好多了。记住TimeUnit.sleep()内部调用的Thread.sleep()也会抛出InterruptException。你也可以查看JDK源代码去验证一下。下面是一个简单例子,它展示如果使用TimeUnit.sleep()方法。
/** * * 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还提供了便捷方法用于把时间转换成不同单位,例如,如果你想把秒转换成毫秒,你可以使用下面代码:
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。
原文地址:http://www.importnew.com/7219.html
- 优先使用TimeUnit类中的sleep()
- 优先使用TimeUnit类中的sleep()
- 优先使用TimeUnit类中的sleep()
- 优先使用TimeUnit类中的sleep()
- 优先使用TimeUnit类中的sleep()
- 优先使用TimeUnit类中的sleep()
- 优先使用TimeUnit类中的sleep()
- 优先使用TimeUnit类中的sleep()
- 优先使用TimeUnit类中的sleep()
- 优先使用TimeUnit类中的sleep()
- Java开发中,优先使用TimeUnit类中的sleep()而不是Thread中的sleep()
- 线程使用中的暂停,建议优先使用TimeUnit类中的sleep()
- TimeUnit类中的sleep() 和Thread.sleep()
- Timeunit与sleep
- TimeUnit 使用
- TimeUnit 使用
- Prefer TimeUnit Sleep over Thread.Sleep
- Thread.sleep还是TimeUnit.SECONDS.sleep
- 这么快就期末了
- UI_Label总结
- JAVA的Date类与Calendar类【转】
- 期末总结
- 深度学习的最新进展及诺亚方舟实验室的研究
- 优先使用TimeUnit类中的sleep()
- 第十五周--数据结构(项目一)--哈希表及其运算的实现
- 科研牛人对看文献,写论文的总结,很实用!
- 编译程序处理重载方法时,会依以下顺序来处理
- 关于有偿提供拼图响应式后台的通知
- iOS UIScrollView滚动视图/无限循环滚动/自动滚动
- 一个例子让你了解Java反射机制
- 第十六周项目一----插入排序之直接插入排序
- page-rank模型讲解