并发编程常用方法

让步: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()方法也会返回

对其的调用可以被中断

全部评论

相关推荐

11-24 11:23
门头沟学院 C++
点赞 评论 收藏
分享
10-11 17:30
湖南大学 C++
我已成为0offer的糕手:羡慕
点赞 评论 收藏
分享
11-01 08:48
门头沟学院 C++
伤心的候选人在吵架:佬你不要的,能不能拿户口本证明过户给我。。球球了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务