【发布时间】:2021-08-12 04:05:48
【问题描述】:
我对 Thread.sleep() 的工作原理有点困惑:
-
如果我在 main 方法中调用它,并且还有其他创建的线程正在运行。它会暂停什么:单独的主线程或其所有子线程(将它们视为主线程的一部分)? 例如:
public static void main(String arg[]) { Thread t1 = new Thread(); t1.start(); Thread.Sleep(1000); } -
如果我在线程的
run()方法中调用sleep()方法,在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(); }
在这样的代码中,t2 和 t1 都会暂停,我不明白为什么。
【问题讨论】:
-
对于第一部分,我会说它只会让一个线程进入睡眠状态,无论是主线程还是附加线程,因为附加线程将获得不同的堆栈,而主线程只会调用线程而不是控制它,第二情况下只有一个线程应该暂停。
-
如果您可以指示 其他 个线程休眠,请想象一下混乱。
-
1.这是一种静态方法。因此它可能只适用于一个线程:当前线程。没有其他任何意义。 2.“
t2和t1都暂停”:不,他们没有。
标签: java multithreading sleep thread-sleep