并发编程常用方法
发布日期:2021-06-30 12:34:08 浏览次数:2 分类:技术文章

本文共 889 字,大约阅读时间需要 2 分钟。

让步:Thread.yield()方法

与sleep方法的比较

当调用yield()时,对线程调度器的一种建议,它在声明:我已经执行完生命周期中最重要的部分了,此刻正是切换给其他线程的大好时机

但是这完全是选择性的,并非一定切换

yield()方法没有声明抛出任何异常

sleep()方法和yield()方法都是Thread类的静态方法,都会使当前处于运行状态的线程放弃CPU,把运行机会让给别的线程。两者的区别在于:

  • sleep()方法会给其他线程运行的机会,不考虑其他线程的优先级,因此会给较低优先级线程一个运行的机会;
  • yield()是在建议具有相同优先级的线程可以运行

当线程执行了sleep(long millis)方法,将转到阻塞状态,参数millis指定睡眠时间;当线程执行了yield()方法,将转到就绪状态。

sleep()方法比yield()方法具有更好的可移植性。不能依靠yield()方法来提高程序的并发性能。对于大多数程序员来说,yield()方法的唯一用途是在测试期间人为地提高程序的并发性能,以帮助发现一些隐藏的错误。

yield()方法是让步,调用后会给线程调度器一个暗示,可以让别的线程来使用cpu。但也仅仅是个暗示,没有办法保证这个暗示一定会被采纳,只是建议让拥有相同优先级的其他线程运行

休眠:Thread.sleep()

使任务终止执行给定的时间

sleep()方法声明抛出InterruptedException异常

在Java SE5中添加了更加显示的sleep()方法版本,直接通过TimeUtil来指定休眠的时间单位,sleep(long timeout)调用会线程处于阻塞状态

加入:Thread.join()

一个线程t在自己的run()内执行另外一个线程nt的nt.join()方法,t线程便会被挂起,nt线程结束后(nt.isAlive()为false)第一个线程t才会继续执行

可在调用join()时带上一个超时参数,如此即使当目标线程nt在设置的超时时间到期后还没有结束,join()方法也会返回

对其的调用可以被中断

转载地址:https://javaedge.blog.csdn.net/article/details/78702391 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Callable接口探究
下一篇:tomcat报错:Error parsing HTTP request header

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月21日 08时58分07秒