java关于多线程yield()方法的问题

qq_37966597 2018-02-28 05:34:04
package zz_text;

public class TestII {

public static void main(String[] args) {
MyThread t1 = new MyThread("t1");
t1.start();

for (int i = 0; i < 100; i++) {
System.out.println("MainThread " + i);
}

}
}

class MyThread extends Thread{

public MyThread(String name) {
super(name);
}

public void run() {
for (int i = 0; i < 100; i++) {
System.out.println(getName() + "\t" + i);
if (i % 5 == 0) {
yield();
}


}
}
}
...全文
404 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyljerry 2018-02-28
  • 打赏
  • 举报
回复
yield只是让出,t1线程还是有可能再次抢到CPU
pilnyun335857183 2018-02-28
  • 打赏
  • 举报
回复
yield方法只是当前线程主动让出cpu,让出后线程是进入runable状态 也就是说该线程将与其他线程一起重新竞争cpu资源;如果系统将cpu时间片分配给了该线程自然继续执行。 而且现在的cpu都是多核的 你两个线程跑不会有明显竞争的,多开几个线程
qq_37966597 2018-02-28
  • 打赏
  • 举报
回复


在 t1线程中 i 是 5 的倍数的时候,会执行yield()方法,让出CPU。为什么在i == 5 的时候,还是会接着执行t1线程

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧