java线程礼让yield
java线程礼让yield
1.yield方法
使用Thread类的静态方法yield可以对当前线程进行礼让,yield方法使线程从运行状态转换到就绪状态,
这与sleep方法对比,sleep是使线程从运行状态进入阻塞状态。
现在给出代码便于理解:
public class testyield implements Runnable{
public static void main(String[] args) {
// TODO Auto-generated method stub
new Thread(new testyield(),"test1").start();
new Thread(new testyield(),"test2").start();
}
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println(Thread.currentThread().getName()+"->start");
Thread.yield(); //进行礼让
System.out.println(Thread.currentThread().getName()+"->end");
}
}
运行结果如下:
1.
test1->start
test1->end
test2->start
test2->end
2.
test1->start
test2->start
test2->end
test1->end
从结果分析,可以得出线程的礼让不是一定成功的,因为一个线程test1调用yield()方法后从运行态到就绪态后,CPU再通过系统调度调度一个线程进入CPU,这个重新调入的线程也可能是线程test1的情况。所以线程使用yield方法不一定会成功礼让,因为yield方法只是单纯把当前线程从运行态切换为就绪态。最终操作系统通过系统调度,重新调度线程,至于调度哪个线程是操作系统的事。所以才会出现上面情况一。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)