当前位置:网站首页>Thread.sleep和TimeUnit.SECONDS.sleep的区别
Thread.sleep和TimeUnit.SECONDS.sleep的区别
2022-07-03 14:02:00 【今夜无风亦无雨】
目录
作用
当需要将线程休眠一段时间的时候,可以使用Thread.sleep/TimeUnit.SECONDS.sleep的方式让当前线程暂停执行,二者都可以实现,并无差异。待休眠时间结束,线程可以继续执行。
区别
Thread.sleep()是java.lang包下的类方法,接收的参数单位是毫秒,若需要让当前线程暂停执行秒,分钟,小时等,需要手动根据毫秒单位来换算;TimeUnit.SECONDS.sleep()是java.util.concurrent包下的类方法,底层调用的依旧是 Thread.sleep(),是对 Thread.sleep()方法的包装,多了时间单位转换和验证。
public void sleep(long timeout) throws InterruptedException {
if (timeout > 0) {
long ms = toMillis(timeout);
int ns = excessNanos(timeout, ms);
Thread.sleep(ms, ns);
}
}当TimeUnit后面跟的是SECONDS,则TimeUnit.SECONDS.sleep(long time)表示的让线程暂停time秒钟,同理可得TimeUnit.MINUTES.sleep(); TimeUnit.HOURS.sleep(); TimeUnit.DAYS.sleep();
拓展
Thread.sleep()可以让当前线程休眠一段时间,但是在该线程不会释放持有的锁,只是暂时让出时间的执行权,期间不参与cpu的调度。休眠时间到了之后,线程会处于就绪状态,待获得cpu的调度时间片之后,会继续运行。
对于wait()方法,则会释放同步资源锁,便于等待该资源的线程得到该资源进而运行,只有其他线程调用notify()/notifyall()方法之后,该线程才会解除等待状态,从而去参与竞争同步资源锁。(注意:wait()是Object类中的方法)
若希望一个线程A内的逻辑需要在线程B内的逻辑执行结束之后执行,可以使用Thread类的join(long time)方法,其中可以灵活设置time值。
边栏推荐
猜你喜欢

JS Part 2

Mysql多表查询 #子查询

Exercise 8-7 string sorting

Exercise 6-6 use a function to output an integer in reverse order

Interface for querying IP home

编程语言:类型系统的本质

jvm-对象生命周期

Metal organic framework MOFs loaded with non steroidal anti-inflammatory drugs | zif-8 wrapped Prussian blue loaded quercetin (preparation method)

Exercise 10-3 recursive implementation of exponential functions

QT learning 19 standard dialog box in QT (top)
随机推荐
jvm-运行时数据区
TS code automatically generates JS
FPGA测试方法以Mentor工具为例
7-8 overspeed judgment
jvm-对象生命周期
Exercise 6-2 using functions to sum special A-string sequences
JS continues to explore...
Common mixins
Exercise 9-3 plane vector addition
别再问自己适不适合做软件测试了
小项目(servelt+jsp+mysql+EL+JSTL)完成一个登录功能的Servlet,具有增删改查的操作。实现登录身份验证,防止非法登录,防止多点登录,记住用户名密码功能。
[clean up the extraordinary image of Disk C]
7-2 and then what time (15 minutes)
愉悦资本新双币基金近40亿元完成首次关账
Reflection -- basic usage
Redis: redis data structure and key operation commands
Eight sorts
fpga阻塞赋值和非阻塞赋值
How to delete an attribute or method of an object
Exercise 6-6 use a function to output an integer in reverse order