当另一个线程在 Java 中 运行 时,如何让一个线程休眠

How can I sleep one thread while the other thread is running in Java

Java中的sleep方法允许我们停止执行中的线程。如果有两个线程 运行 而我强行 sleep 一个线程,那么另一个线程也会休眠。

我创建了两个线程,但是当我为一个线程应用 sleep 方法而另一个线程为 运行 时,两个线程都显示为 false 作为 isAlive 方法的结果

Q1) 为什么会这样?

Q2) 在特定线程启动后调用isAlive方法显示false会怎样?

Q3) Thread.sleep()thread.sleep() 之间有什么区别,其中 threadThread class.

的一个实例

这是问题的一些示例代码

public class Hello {
    public static void main(String[] args) throws InterruptedException {
        Runnable task = ()-> System.out.println("Hello");

        Thread thread =  new Thread(task);
        Thread thread1 =  new  Thread(task);


        thread.start();
        System.out.println(thread.isAlive());
        System.out.println(thread1.isAlive());

        thread1.start();
        System.out.println(thread.isAlive());
        System.out.println(thread1.isAlive());

        thread.sleep(1000);
        System.out.println(thread.isAlive());
        System.out.println(thread1.isAlive());
    }
}

实际结果:

true
false
Hello
true
true
Hello
false
false

预期结果

true
false
Hello
true
true
Hello
false
true

没有实例方法Thread#sleep(long)。事实上,您调用了将调用线程设置为休眠状态的静态方法。(参见this

正如@Kayaman 所说,在这段时间内,两个线程都完成了,这导致了你的结果。

此外,您应该知道您无法预测线程,因为它们非常依赖于平台并且在多个系统上的处理方式不同。

相反,如果您想等到线程完成,您可以使用实例方法 Thread.join()

您可以使用 Thread.sleep(长秒)或 'wait()'。 但是如果你想等到线程完成工作。您可以使用 'thread.join' 它是一个实例方法。