`
runanli
  • 浏览: 44351 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[翻译] Java Thread sleep() vs yield() vs wait()

 
阅读更多

该文章翻译自http://www.logicaltrinkets.com/wordpress/?p=153(也许会被墙)

 

这三个方法最终都要归结到操作系统的调度机制上,其实也就是针对进程和线程的时间片调度上。

 

.sleep(n)方法这样理解:“嘿,OS老大,我已经结束了我当前时间片里的活,而且你在n微秒内不要再给我安排其他活了”。OS就会在其请求的n毫秒内不再去调度这个被sleep的线程。

 

.yield()方法这样理解:“嘿,OS老大,我已经结束了我当前时间片里的活,但是我还有其他活要去干”。 OS会去做选择:要么再分配CPU时间片给这个yield的线程,要么去把这个线程所放弃的时间片分给其他线程。

 

.wait()方法这样理解:“嘿,OS老大,我已经结束了我当前时间片里的活,而且在有人用notify()叫我之前不要再给我安排其他活了“。 这样的话,和sleep一样,OS在有其他线程去调用notify(或者有其他一些唤醒场景发生时)之前就不会去调度这个线程干活了。

 

线程在执行一些阻塞IO操作或少部分其他情况时也会丢失一些其剩余的时间片。 如果一个线程占用了整个的CPU时间片,OS会强制去取回CPU控制权,这时候就好像yiled()被调用了一样,这种情况下可以保证其他进程可以运行。

 

线程在执行一些阻塞IO操作或少部分其他情况时也会丢失一些其剩余的时间片。 如果一个线程占用了整个的CPU时间片,OS可以强制去取回CPU控制权,这时候就好像yiled()被调用了一样,这种情况下可以保证其他进程运行。

 

总的来说,yield极少会被调用,除非你的应用含有那种需要极大CPU计算量的业务线程,这时调用一下yield得话*可能*可以提升一些你系统得响应能力(但是作为代价,一些OS需要做的事情-例如上下文切换-开销也不会小)。所以还是老话,针对你所要达到的目的来衡量技术的使用永远没错。

分享到:
评论

相关推荐

    线程中sleep、join、yield、wait的区别

    CSDN前辈众多,本文要说全部原创,那不现实,但本文绝对走肾之文,概念知识多来自前辈博文讲解,特此感谢。...public class ThreadTest extends Thread{ public ThreadTest(String name){ super(name); } @

    sleep()、wait()、yield()和join()方法特点及区别.docx

    1.这两个方法来自不同的类,sleep是Thread类的方法,而wait是Object类的方法; 2.执行sleep方法后不会释放锁,而执行wait方法后会释放锁; 3.wait,notify和notifyAll只能在同步方法或同步代码块中调用,而sleep可以...

    java线程分析java project例子

    java线程分析java project例子,里面分析了sleep(),join(),yield()和wait以及notify等方法的使用以及需要注意的地方。

    JAVA高级程序设计测试题含答案.docx

    JAVA高级程序设计测试题含答案 JAVA高级程序设计测试题含答案 160题_共320.00分_及格260.00分 您的姓名: [填空题] * _________________________________ 第1题 【单选题】【2.00分】【概念理解】 在程序读入字符...

    Java高级程序设计测试含答案.docx

    () [单选题] * A.wait()(正确答案) B.sleep() C.yield() D.currentThread() 下面关于线程优先级的说法中,正确的是() [单选题] * A.线程的优先级是不能改变的 B.线程的优先级是在创建线程时设置的 C.在...

    Java测试题2答案

    DEF A notify() B wait() C notifyAll() D sleep() E.yield() F.synchronized(this) 7.构造BufferedInputStream的合适参数是哪个? AC A BufferedInputStream B BufferedOutputStream ...

    java线程分析android project例子

    java线程分析android project例子,主要分析了sleep(),join(),yield()和wait()以及notify等方法以及需要注意的事项。

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    【多线程】sleep()和wait()分别是哪个类的方法,有什么区别? 79 【多线程】sleep()和yield()的区别 79 【多线程】对synchronized理解?用在代码块和方法上有什么区别? 80 【多线程】Volatile的理解 82 【*多线程】...

    java核心知识点整理.pdf

    25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与算法 .................................

    JAVA核心知识点整理(有效)

    25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与算法 .................................

Global site tag (gtag.js) - Google Analytics