线程的方法之yield()

本文深入探讨了Java中Thread的yield()方法,解释了其作用及与其他线程控制方法如wait(), sleep(), join()的区别。揭示了yield()在实际应用中的局限性和使用场景。

山近月远觉月小,便道此山大于月。
若人有眼大如天,当见山高月更阔。


关于Thread的 yield() 方法,在实际的开发过程中,说实话真的是很不常见。但是在面试过程中怕是司空见惯啦。

正由于其开发中几乎见不到它的身影,一般情况下,我也懒得去理它。但是由于最近在回顾Kotlin Coroutine相关内容时,再次见到了它的身影,那么看起来绕不开它。

咳咳咳~~,扶我起来…


1. 单词yield

在英语中,yield means to let go, to give up, to surrender. 翻译过来就是:『让步,放弃,投降』。


2. yield()的作用

调用yield()的线程——告诉JVM我情愿让出CPU,让其他的线程先运行,这点也注定该线程不会做太重要的任务。

需要注意的是,这仅仅是该线程向CPU提出自己的想法,具体CPU怎么安排是不确定的。这也意味着是不能保证达到预期效果的。所以不必对此报太大希望。(PS:在生成环境中,我们确实不敢这么用它。)

  /**
     * A hint to the scheduler that the current thread is willing to yield
     * its current use of a processor. The scheduler is free to ignore this
     * hint.
     */
    public static native void yield();

通过源码的注释,我们也可以窥探一二…

3. wait,sleep,join,yield的区别

  1. yield() VS wait()

    a. wait()只能在synchronized代码块或者方法中去调用,而yield()没有此限制。
    b. wait()可以指定一段时间去尝试切换线程的调度。
    c. wait()可以在任意时间调用notify()或者notifyAll()来唤醒线程。

  2. yield() VS sleep()

    sleep()可以在其参数设置的时间内强制挂起当前线程,而yield()并不能保证其效果。

  3. yield() VS join()

    join()方法让调用线程执行完毕(或者执行规定的时间),其它线程才能继续执行。

4. 总结

yield()虽然可能让出CPU,但是由于不能保证一定能让出CPU,所以显得很鸡肋。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值