TimeUnit是什么?

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

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

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

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

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

它将返回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

java对对碰time暂停,优先使用TimeUnit类中的sleep()相关推荐

  1. 优先使用TimeUnit类中的sleep()(转自 ImportNew - 刘志军 翻译自 javarevisited)

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

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

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

  3. java对对碰游戏设计报告_手把手带你用Java打造一款对对碰游戏(下篇)

    上篇文章介绍了对对碰游戏的理论部分和介绍了JLabel.JButton.JPanel.ImageIcon.JTextField.JProgressBar等组件的基本使用,介绍了进度条(JProgres ...

  4. java 对对碰游戏

    对对碰游戏规则说明: 一. 概述 游戏在 8 × 8 格子的游戏池中进行.每个格子中有一个图标.鼠标连续选中两个相邻的图标,它们的位置会互换,互换后如果横排或竖排有 3 个以上相同的图标,则可以消去该 ...

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

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

  6. Java课设对对碰_第11章对对碰游戏(图形版)(Java游戏编程原理与实践教程课件).ppt...

    游戏界面和相关图片素材 11.3 程序设计的步骤 11.3.1 设计游戏窗口类(GameRoom.java) 游戏窗口类GameRoom实现游戏全部功能,继承JFrame组件实现的.是由上方Panel ...

  7. Java游戏开发——对对碰

    游戏介绍: 对对碰游戏在n*n的游戏池中进行,每个格子中有一个图案.鼠标连续选中两个横排或竖排相邻的图案,它们的位置会互换,互换后如果横排或者竖排有3个以上相同的图像,则可以消去该图像,并得分. 游戏 ...

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

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

  9. JAVA调试出现不断在ClassLoader类中执行时的问题?

    在Eclipse中进行JAVA调试时,出现不断在ClassLoader类中执行时的问题? 解决方法: (1)打开window - Show view - Other - Debug - Breakpo ...

最新文章

  1. hibernate session的load和get方法
  2. 虚拟机搭建DHCP服务器
  3. java mina文件传输_如何将Apache MINA FTP服务器中上传的文件重定向到数据库?
  4. torch.Tensor.scatter_(dim, index, src, reduce=None)
  5. 【分类汇总】110 天以来的题解分类汇总
  6. Android 音视频开发学习思路大纲
  7. 黑苹果AX201网卡驱动小白教程,小新pro13不换网卡也能上网!
  8. 人工智能项目案例:AI+企业智能化管理
  9. python爬虫——web前端基础(4)
  10. 从看守到贴身保镖服务的安全纵深防御
  11. 不同速度流体的剪切形成不同尺度的漩涡,看起来很像分形。
  12. 单盘位小先锋 群晖DS112j家用NAS评测
  13. 安卓笔记-视频版(还没学完)
  14. 2022 年度「博客之星」评选TOP 200进100结果已出炉
  15. 【破事氵】在Linux环境中让程序在后台运行
  16. MFC下载网页简单实现
  17. db2 reorg到底需要多少表空间
  18. 部署hexo遇到报错ERROR Deployer not found: git的解决办法
  19. 简诉事件代理(事件委托)及其优点
  20. java 代码模板_请按模板要求,将【代码】替换为Java程序代码

热门文章

  1. android 定位服务源码,android gps定位app源码(GpsTracker)
  2. ERP不规范,同事哭晕在厕所
  3. 《计算机操作系统【汤小丹】》课后习题答案
  4. 2021-05-10 关于vant按钮小程序点击后出现灰色背景去除方式
  5. Windows 命令行卸载软件
  6. 【夏虫语冰】Visual Studio工程编译问题汇总
  7. UiPath安装教程
  8. js上传图片获取图片尺寸
  9. ADDS:启用 Advanced Offline Files
  10. android代码连接wifi