当另一个线程在 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()
之间有什么区别,其中 thread
是 Thread
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' 它是一个实例方法。
Java中的sleep
方法允许我们停止执行中的线程。如果有两个线程 运行 而我强行 sleep
一个线程,那么另一个线程也会休眠。
我创建了两个线程,但是当我为一个线程应用 sleep
方法而另一个线程为 运行 时,两个线程都显示为 false 作为 isAlive
方法的结果
Q1) 为什么会这样?
Q2) 在特定线程启动后调用isAlive
方法显示false会怎样?
Q3) Thread.sleep()
和 thread.sleep()
之间有什么区别,其中 thread
是 Thread
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' 它是一个实例方法。