gpt4 book ai didi

java - while 循环中的一个线程是否会将 CPU 时间提供给另一个相同类型的线程?

转载 作者:行者123 更新时间:2023-12-03 10:10:29 25 4
gpt4 key购买 nike

如果我有以下虚拟代码:

public static void main(String[] args) {
TestRunnable test1 = new TestRunnable();
TestRunnable test2 = new TestRunnable();
Thread thread1 = new Thread(test1);
Thread thread2 = new Thread(test2);
thread1.start();
thread2.start();
}

public static class TestRunnable implements Runnable {
@Override
public void run() {
while(true) {
//bla bla
}
}
}

在我当前的程序中,我有一个类似的结构,即两个线程执行相同的 Run() 方法。但出于某种原因,只有线程 1 获得 CPU 时间,即线程 2 永远没有机会运行。这是因为当线程 1 在其 while 循环中时,线程 2 在等待吗?

我不太确定,如果一个线程处于 while 循环中,它会“阻塞”其他线程吗?我会这么认为,但不是 100% 肯定,所以很高兴知道是否有人可以告诉我这里实际发生的事情。

编辑好吧,只是试着再次做一个非常简单的例子,现在两个线程都获得了 CPU 时间。但是,在我的原始程序中并非如此。一定是某个地方的错误。现在正在调查。感谢大家的清理,至少我得到了这些知识。

最佳答案

JVM 不能保证它会暂停一个繁忙的线程来给其他线程一些 CPU。

最好调用 Thread.yield();,或者如果它不起作用,请在你的繁忙循环中调用 Thread.sleep(100);让其他线程有一些 CPU。

关于java - while 循环中的一个线程是否会将 CPU 时间提供给另一个相同类型的线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13464135/

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