Thread.sleep 方法在 main 方法中调用,它会暂停哪个线程?

时间:2021-05-23 16:38:23

标签: java multithreading sleep thread-sleep

我对 Thread.sleep() 的工作方式有点困惑:

  1. 如果我在 main 方法中调用它,并且还有其他创建的线程正在运行。它会暂停什么:单独的主线程或它的所有子线程(将它们视为主线程的一部分)? 例如:

     public static void main(String arg[])
     { 
         Thread t1 = new Thread();
         t1.start();
         Thread.Sleep(1000);
     }
    
  2. 如果我在线程的 sleep() 方法中调用 run() 方法,当在 main 中为线程调用 start() 方法时,它是否也会暂停其他线程?因为那发生在我身上......虽然我知道在这种情况下它应该只暂停它在内部调用的线程 例如:

     //thread Tester has a sleep() in its run() while NoSleep doesn't have
      public static void main(String arg[])
      { 
          Tester t1 = new Tester();
          NoSleep t2 = new NoSleep();
          t1.start();
          t2.start();
     }
    

在这样的代码中,t2t1 都暂停了,我不明白为什么。

1 个答案:

答案 0 :(得分:0)

Thread.sleep() 是 Java 中许多名称非常糟糕的事物之一。* 不要认为它“休眠”了任何线程。有一种更简单的思考方式:

Thread.sleep(n) 什么都不做。

它至少在 n 毫秒内什么都不做,然后它返回。这就是您需要了解的关于 sleep() 的全部内容(至少,在您成为 Java 运行时环境的维护者之前,您需要了解的全部内容。)


* Java 是由几个非常聪明的博士发明的。计算机科学家。 Java 是一种简单、优美的语言;但是他们给某些对专家来说似乎很明显但有时对初学者来说真的很困惑的东西赋予了名称。