多线程之yield()方法

本文详细解析了Thread.yield()方法的作用与实现原理,通过对比有无使用yield方法的代码示例,展示了该方法如何影响线程调度,使相同优先级的线程能够轮转执行,以及在实际应用中可能遇到的效果不确定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:简介

  1. 简介
           Thread.yield()方法作用是:暂停当前正在执行的线程对象(及放弃当前拥有的cup资源),
    并执行其他线程。yield()做的是让当前运行线程回到可运行状态,以允许具有相同优先级的其
    他线程获得运行机会。因此,使用yield()的目的是让相同优先级的线程之间能适当的轮转执行
    但是,实际中无法保证yield()达到让步目的,因为让步的线程还有可能被线程调度程序再次选中
  2.    结论:       
       yield()从未导致线程转到等待/睡眠/阻塞状态。在大多数情况下,yield()将导致线程从运行状
       态转到可运行状态
    ,但有可能没有效果。

二:代码示例

  1.  下面我们比较示例代码运行的时间作为比较结果,用来测试yield方法的使用结果   
  2. 创建继承Thread类的线程类MyThread.java
      
  3. 创建测试类
      
  4.   效果如下:
       
       可以发现我们在运行MyThread线程的时候CPU是独占时间片的,没有其他线程和它抢CPU,
        所以使用的时间是23毫秒。
  5. 下面我们修改一下MyThread类,添加yield方法 ,将它让给其他任务去占用CPU执行时间
        
  6. 效果
           
        可以发现我们将CPU让给其他资源导致速度变慢。 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值