Java 中 Wait 和 Sleep 的区别

2025年5月3日 | 阅读3分钟

在 Java 中,waitsleep 是多线程的概念。Wait 和 Sleep 是用于暂停进程几秒钟并使线程进入等待状态的方法。让我们一一了解它们以获取更多信息。

Wait vs Sleep in Java

Sleep()

Sleep() 方法与 Thread 类相关,用于停止当前线程的执行几秒钟。Sleep() 方法接受毫秒为单位的睡眠时间。使用 Sleep() 方法并且从停止的地方恢复执行时,不会丢失监视器的所有权。简单来说,Sleep() 方法负责将当前线程置于“非可运行”状态。

Wait()

Wait() 方法与 Object 类相关。Wait() 方法负责将调用线程置于等待状态。线程将保持在等待状态,直到另一个线程调用该对象的 notify() 或 notifyAll() 方法。线程在获得监视器所有权后恢复执行。

在理解它们之间的区别之前,让我们先了解它们之间的相似之处。因此,Wait() 和 Sleep() 方法都是使当前线程进入非可运行状态的原生方法。

让我们用一个例子来理解它们之间的相似之处。

WaitSleepSimilaritiesExample.java

输出

Wait vs Sleep in Java

Wait() 与 Sleep() 的区别

让我们来理解 Wait() 和 Sleep() 方法之间的区别

序号。Wait()Sleep()
1.Wait() 方法与 Object 类相关。Sleep() 方法与 Thread 类相关。
2.Sleep() 方法在同步期间不会释放对象的锁。
3.它不是静态方法。它是静态方法。
4.在同步时,Wait() 方法会释放 obj。在同步时,Sleep() 方法不会释放 obj,即锁。
5.我们只能从同步上下文中调用 Wait() 方法。我们可以从同步上下文外部调用 Sleep() 方法。
6.Sleep() 方法有两个重载方法,如下所示:
  • sleep(long milliseconds, int nanoseconds)
  • sleep(long milliseconds)
Sleep() 方法有三个重载方法,如下所示:
  • Wait()
  • wait(long timeout, int nanoseconds)
  • wait(long timeout)
7.Wait() 方法的构造函数定义如下:
public final void Wait(long timeout)
Sleep() 方法的构造函数如下:
public static void Sleep (long millis) throws Interrupted_Execption