Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么在主线程中使用while(true)循环而没有睡眠时子线程不工作?_Java_Multithreading - Fatal编程技术网

Java 为什么在主线程中使用while(true)循环而没有睡眠时子线程不工作?

Java 为什么在主线程中使用while(true)循环而没有睡眠时子线程不工作?,java,multithreading,Java,Multithreading,将主线程中的while(true)循环与thread.sleep()一起使用时,子线程可以正常工作,但如果我从while循环中删除sleep方法,子线程将无法工作。我的意思是,线程定义了并行性,所以它应该工作 public static void main(String[] args) { Thread th1 = new Thread(new Runnable() { @Override public void run() { for (int i=0; i

将主线程中的while(true)循环与thread.sleep()一起使用时,子线程可以正常工作,但如果我从while循环中删除sleep方法,子线程将无法工作。我的意思是,线程定义了并行性,所以它应该工作

public static void main(String[] args) {
  Thread th1 = new Thread(new Runnable() {
    @Override
    public void run() {
        for (int i=0; i<50; i++) {
          System.out.println("I love java.");
          Thread.sleep(500);
        }
    }
  });
 
  th1.start();
  th2.start(); // Similarly assume thread 2

  // Here's my main thread
  while(true) {
      System.out.println("I am main thread.");
      // If i use Thread.sleep(200) here, works fine but if not the child thread do not 
         print messages
  }

}
publicstaticvoidmain(字符串[]args){
Thread th1=新线程(new Runnable(){
@凌驾
公开募捐{

对于(inti=0;iNo),它在两种情况下都可以正常工作

在主线程中使用
Thread.sleep()
时,主线程执行速度较慢,因此可以看到“我爱java”消息(因为t1首先执行)

当您不使用
Thread.sleep()
时,主线程执行得更快,因此您看不到“我爱java”消息。但是它在那里(在输出的第一行或第二行)

调试程序以查看更多信息。调试显示当前运行的线程数以及更多信息

如果您想了解有关并发(多线程)的更多信息,请访问链接

您的期望是什么?在您的情况下,while循环将永远运行。我希望while循环可以打印消息。同时,线程也应该工作,但在我从while循环中删除睡眠之前,线程不会工作。在这里,您无法决定何时执行哪个线程。线程调度程序选择它想要的作为bot的线程h主线程和th1具有相同的优先级5。如果您想让th1先工作,可以增加它的优先级。如果您不想这样做,线程调度程序的工作就是决定它要首先选择什么。感谢您的回答。是的,您是对的。我不想在子线程中打印,而是通过在文件中写入和追加来调试它,然后该文件包含完整的内容。感谢您消除我的疑虑。您不需要编写文件,只需向上滚动控制台窗口即可查看消息