首页 > 其他分享 >Thread.sleep()和TimeUnit.SECONDS.sleep()的区别

Thread.sleep()和TimeUnit.SECONDS.sleep()的区别

时间:2022-12-06 10:24:25浏览次数:74  
标签:Thread SECONDS 毫秒 线程 TimeUnit sleep

1、TimeUnit是什么?

TimeUnit是java.util.concurrent包下面的一个类,TimeUnit提供了可读性更好的线程暂停操作。

首先来看源码,原来是对Thread.sleep方法的包装,实现是一样的,只是多了时间单位转换和验证,然而TimeUnit枚举成员的方法却提供更好的可读性

    public void sleep(long timeout) throws InterruptedException {
        if (timeout > 0) {
            long ms = toMillis(timeout);
            int ns = excessNanos(timeout, ms);
            Thread.sleep(ms, ns);
        }
    }

接着我们来看一下Thread.sleep()方法,它是一个重载方法,可以接收长整型毫秒和长整型的纳秒参数,这样对程序员造成的一个问题就是很难知道到底当前线程是睡眠了多少秒、分、小时或者天。看看下面这个Thread.sleep()方法:
Thread.sleep(2400000)

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

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

TimeUnit.MINUTES.sleep(4);
类似你可以采用秒、分、小时级别来暂停当前线程。你可以看到这比Thread的sleep方法的可读的好多了。记住TimeUnit.sleep()内部调用的Thread.sleep()也会抛出InterruptException。
除了sleep的功能外,TimeUnit还提供了便捷方法用于把时间转换成不同单位,例如,如果你想把秒转换成毫秒,你可以使用下面代码:
TimeUnit.SECONDS.toMillis(44)
它将返回44,000

枚举常量摘要

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

版权声明:本文为CSDN博主「NPException」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_36850813/article/details/97385840

标签:Thread,SECONDS,毫秒,线程,TimeUnit,sleep
From: https://www.cnblogs.com/sjkzy/p/16954447.html

相关文章

  • 洛谷-P5541 Sleepy Cow Herding S
    SleepyCowHerdingSSleepyCowSorting的升级版,从\(3\)头牛变成\(n\)的情况分类讨论+双指针先把答案本就连续的特判丢掉最大值最大值就尽量把每个空位......
  • USACO 2019 January Contest, Bronze Problem 2. Sleepy Cow Sorting
    SleepyCowSorting分类讨论先把答案本就连续的特判丢掉最大值最大值就尽量把每个空位都踩一遍,模拟一下会发现,第一跳的空隙一定没办法踩到,因此考虑两边第一跳谁......
  • Python time sleep()方法
    描述Pythontimesleep(secs)函数推迟调用线程的运行,可通过参数secs指秒数,表示进程挂起的时间。语法sleep()方法语法:time.sleep(t)参数t--推迟执行的秒数。返回......
  • 【k8s】deploy-minReadySeconds
    环境kubernetes1.20.4SpringBoot2.5.0-M3目标deploy在更新过程中,启动Pod后,minReadySeconds可以定义该Pod经过多少秒后才被视为可用。如果新的Pod不可用,是......
  • OS Lab 1.2 sleep (easy)
    1实验目的    为xv6系统实现UNIX的sleep程序。你的sleep程序应该使当前进程暂停相应的时钟周期数,时钟周期数由用户指定。例如执行sleep100 ,则当前进程暂停,等......
  • Linux下centOS和redhat测试数据usleep_nanosleep_select
    系统不一样,gcc版本也不一样。其中centOS刚租任不久的没有甚么用户进程运行。redhat测试服务器有用户进程在后台运行//编译gcctest.c//运行./a.out#include<stdio.h>#inc......
  • 实例065_使用Sleep方法延迟时间
      usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usi......
  • java——多线程——Thread类的常用方法——sleep
    Thread类的常用方法——sleeppublicstaticvoidsleep(longmillis):使当前正在执行的线程以指定的毫秒数暂停(暂时停止执行)。毫秒数结束之后,线程继续执行public......
  • AssetManager.finalize() Timed Out After 10 Seconds分析
    没有代码,就没有bug。程序员在编码时,总会比不避免的出现bug。倒不是因为我们热爱制造bug,创造机会和测试妹子频繁沟通。而是现实情况很复杂,存在着很多不确定性。尤其是那些崩......
  • 2022CCPC威海J. Eat, Sleep, Repeat(博弈/思维)
    题目大意是给定长度为n的数组a,两个人轮流从中选一个正数将其减1。且有k个限制形如\(limit_{x_i}=y_i\),即\(x_i\)在数组中最多出现\(y_i\)次。判负的情况为:数组全为0......