睡眠与等待:差异与比较

Java 有几种方法来执行某些操作。

方法是一组仅在被调用时运行的代码; 并且可能会也可能不会返回结果。

方法如 睡觉 和 wait 用于多线程。 它们都暂停并使线程进入等待状态,但在功能上有很大差异。

关键精华

  1. “睡眠”是一种身心不活动的休息状态,而“等待”则是停留在一个地方或延迟行动,直到特定事件发生。
  2. “睡眠”是一种自然而必要的身体机能,而“等待”是一种可以选择或避免的自愿行为。
  3. “睡眠”与夜间相关,而“等待”则可以发生在一天中的任何时间。

睡眠与等待

sleep()和wait()方法的区别在于,sleep()方法用于在程序中暂停当前线程的执行一段特定的时间,而wait()方法用于在程序中暂停执行或挂起当前线程,直到调用特定方法。

睡眠与等待

在使用 sleep 方法期间,当前线程不会失去监视器的所有权。

Sleep 是一个静态方法,是类线程的一部分。 等待时间结束后,线程回到原来的可运行状态。

它确保在等待时充分利用CPU。

而 wait() 方法用于 爪哇岛 程序命令当前线程等待,直到不再为该对象调用另一个线程。

一旦获得监视器的控制权,线程就会继续执行。

与 sleep 不同,它不是静态方法,并且是对象类的一部分。

对比表

比较参数睡觉稍等
增益级睡眠方法是线程类的一部分 等待方法是对象类的一部分
方法类型睡眠是一个静态方法等待不是静态方法
调用技巧可以从同步上下文之外调用睡眠方法只能从同步上下文调用 wait 方法
解锁Sleep 方法不释放对象上的锁,在指定的超时时间内,在同步期间等待方法释放对象上的锁,以便有机会在同步期间执行
声明公共静态无效睡眠() 公共最终无效等待()

什么是睡眠?

线程sleep()是Java程序中的一个静态方法,它挂起当前线程并使其处于等待状态一段规定的时间。

另请参阅:  Kapwing vs Canva:差异与比较

一旦等待状态和时间结束,线程状态就转为可运行状态。 然后等待CPU进一步执行。

此方法的目的是在程序中创建几秒钟的延迟,同时最大限度地利用 CPU。

如果系统繁忙或过载,则等待或暂停时间较长,否则,它将小于或等于实际时间。

sleep 方法的返回类型可以说是 void,因为它不返回任何值。

睡眠线程不会丢失监视器或锁定它已经获得的线程。

无论如何,如果睡眠受到干扰,线程将抛出 Interrupted_Exception。

实际上 为期 线程休眠的时间取决于操作系统的调度程序和系统计时器。

sleep方法的语法是 – public static void sleep(long milliseconds)

public static void sleep(长毫秒,int纳秒)

这里毫秒和纳秒是线程休眠的时间。

睡觉

什么是等待?

Wait() 是一种用于线程间通信的方法。

每当使用 wait() 线程时,调用线程或当前线程都会暂停并挂起,直到系统中调用像 notify() 或 notifyAll() 这样的方法。

notify()方法会唤醒指定的线程,而notifyAll()方法适用于每个线程。

同步时,等待方法放弃对资源的锁定。

Wait方法没有返回值,可以说返回void。

另请参阅:  CAST 与 CONVERT 函数:区别与比较

Wait方法的两个异常是Interrupted_Exception(当当前线程在睡眠期间被中断时)和IllegalMonitorStateException(当当前线程不是监视器上对象的所有者时)。

Wait 方法是对象类的一部分。 该方法仅适用,并且可以通过同步块调用。

wait 方法在同步期间释放挂起或锁定的屏幕。

而Wait方法专门允许synchronized的多个线程一个一个访问同一个对象。

Wait 方法的语法是 – public final void wait()

等待

睡眠和等待之间的主要区别

  1. Sleep 方法使线程休眠指定的特定时间段(指定的超时时间,除非过期或中断),而 Wait 方法使线程休眠,直到调用像notify() 或notifyAll() 这样的方法。
  2. Sleep 方法在线程上执行,而 Wait 方法在对象上执行。
  3. Sleep方法用于时间同步,而Wait方法用于多线程同步。
  4. 在Wait线程中,synchronized多个线程可以相邻访问同一个对象,而在Sleep线程中,synchronized多个线程必须等待当前线程的睡眠结束。
  5. Wait方法将锁或监视器设置为空闲,而Sleep方法在当前线程的睡眠或等待期间不会将监视器设置为空闲。
X和Y的区别 2023 05 10T161359.507
参考资料
  1. https://pdfs.semanticscholar.org/51fd/24ae444910fd39b117bb3044a12591f038fa.pdf
  2. https://dl.acm.org/doi/pdf/10.1145/289524.289572

最后更新时间:31 年 2023 月 XNUMX 日

点1
一个请求?

我付出了很多努力来写这篇博文,为您提供价值。 如果您考虑在社交媒体上或与您的朋友/家人分享,这对我很有帮助。 分享是♥️

关于“睡眠与等待:差异与比较”的 18 个思考

  1. 本文有效地阐明了 sleep 和 wait 方法之间的差异,提供了清晰简洁的比较。同步和锁释放的细节特别有帮助。

    回复
  2. 对睡眠和等待方法的详细解释非常好。对于任何想要加深对这些基本 Java 概念的理解的人来说,本文都是一笔宝贵的财富。

    回复
  3. 本文对 Java 中的 sleep 和 wait 方法进行了彻底的比较。我很欣赏详细的解释,它们提供了对其功能的宝贵见解。

    回复
    • 我发现这篇文章内容丰富且精心制作。对sleep和wait方法的解释有利于更好地理解它们在Java中的用法和含义。

      回复
  4. 本文是了解 Java 中的 sleep 和 wait 方法的宝贵资源。解释很详细,比较表为理解这些方法之间的差异提供了方便的参考。

    回复
    • 我也有同样的感受,Vmorgan。比较表清晰地概述了差异,详细的描述增强了对睡眠和等待方法的理解。

      回复
  5. 感谢你的这篇文章。我很欣赏睡眠和等待方法之间差异的详细解释。清楚地了解它们在 Java 程序中的功能是有好处的。

    回复
  6. 本文详细解释了 sleep 和 wait 方法之间的区别。我发现同步期间等待方法的行为的解释特别有启发性。

    回复
    • 本文对 sleep 和 wait 方法的行为和返回类型的描述信息量很大。了解这些差异对于 Java 中有效的多线程处理至关重要。

      回复
  7. 我发现这篇文章内容丰富且富有洞察力。对 sleep 和 wait 方法的深入分析极大地有助于理解它们在 Java 中的细微差别和含义。

    回复

发表评论

想保存这篇文章以备后用? 点击右下角的心形收藏到你自己的文章箱!