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

DSF*_*DSF 2 java multithreading while-loop

如果我有以下虚拟代码:

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 Code Online (Sandbox Code Playgroud)

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

我不确定,如果一个线程在while循环中它是否"阻塞"其他线程?我会这么认为,但不是100%肯定所以如果有人能告诉我这里发生了什么事情会很高兴.

编辑 好的,只是尝试再次制作一个非常简单的例子,现在这两个线程都获得了CPU时间.然而,在我的原始程序中并非如此.某处必须是某些bug.现在调查一下.感谢大家清理它,至少我掌握了这些知识.

Boh*_*ian 7

JVM无法保证它会暂停一个繁忙的线程来为其他线程提供一些CPU.

在繁忙的循环中调用Thread.yield();或者如果调用不起作用Thread.sleep(100);,让其他线程拥有一些CPU 是一个好习惯.