gpt4 book ai didi

java - 为什么我的 Thread.yield() 不起作用

转载 作者:行者123 更新时间:2023-12-01 22:11:56 31 4
gpt4 key购买 nike

代码:

class A extends Thread {
public void run() {
Thread.yield();
System.out.println("Child Thread");
}
}
public class Human {
public static void main (String agrs[]) {
A t1 = new A();
A t2 = new A();
A t3= new A();
A t4= new A();
A t5= new A();
t1.start();
t2.start();
t3.start();
t4.start();
t5.start();
for(int a=0;a<1000;a++) {
System.out.println(a);
}
}
}

输出:

626
627
628
629
630
a's value
a's value
a's value
631

当我运行程序时,每次运行的输出都不同。即使我使用 yield() 方法让主线程首先完成它的工作。但现在我仍然得到混合的输出。为什么?

最佳答案

Thread.yield() 不是您所需要的。该函数的作用是告诉虚拟机该线程现在愿意放弃 CPU。它既没有指定持续多长时间,也没有强制虚拟机将 CPU 分配给另一个线程。该函数的确切行为尚未标准化。这意味着,虚拟机根本不需要执行任何操作!

该函数所做的只是发出信号,表明现在是将 CPU 交给另一个线程的好时机。

您需要的是互斥体、信号量或同步,所以基本上任何类型的真正同步。

我建议您阅读一些有关多线程的教程。

关于java - 为什么我的 Thread.yield() 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31648533/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com