java多线程之(yield)

本文探讨了Java中的yield方法,该方法用于让当前线程自愿放弃CPU执行权,给相同优先级的线程提供执行机会。尽管它不保证具体何时交出控制权,且不会使线程进入阻塞状态,只重回就绪状态,不同于sleep方法。通过示例展示了yield方法的使用和线程状态的变化。

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

yield方法会让当前线程交出CPU权限,让CPU去执行其他的线程。它跟sleep方法类似,同样不会释放锁。但是yield不能控制具体的交出CPU的时间, 另外,yield方法只能让拥有相同优先级的线程有获取CPU执行时间的机会。 注意,调用yield方法并不会让线程进入阻塞状态,而是让线程重回就绪状态, 它只需要等待重新获取CPU执行时间,这一点是和sleep方法不一样的。具体请参照一下实例:

  

public class TestYield {
     
    private int i = 10;
    private Object object = new Object();
     
    public static void main(String[] args) throws Exception  {
        TestYield test = new TestYield();
        MyThread thread1 = test.new MyThread();
        MyThread thread2 = test.new MyThread();
        thread1.start();
        thread2.start();
    } 
     
    class MyThread extends Thread{
        @Override
        public void run() {
            synchronized (object) {
                i++;
                System.out.println("i:"+i);
                try {
                    System.out.println("线程"+Thread.currentThread().getName()+"进入就绪状态");
                    Thread.currentThread().yield();
                    System.out.println("线程"+Thread.currentThread().getName()+"就绪结束,已获得cpu可以继续执行");
                } catch (Exception e) {
                    // TODO: handle exception
                }
                i++;
                System.out.println("i:"+i);
            }
        }
    }
}

输出结果:

     i:11
线程Thread-0进入就绪状态
线程Thread-0就绪结束,已获得cpu可以继续执行
i:12
i:13
线程Thread-1进入就绪状态
线程Thread-1就绪结束,已获得cpu可以继续执行
i:14

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值