9.21. Sleep().suspend() 和 wait() 之间有什么区别

发布于 2023-05-08 12:29:45 字数 646 浏览 62 评论 0

Thread.sleep() 使当前线程在指定的时间处于 非运行(Not Runnable)状态。线程一直持有对象的监视器。比如一个线程当前在一个同步块或同步方法中,其它线程不能进入该块或方法中。如果另一线程调用了 interrupt() 方法,它将唤醒那个 睡眠的 线程。

注意:sleep() 是一个静态方法。这意味着只对当前线程有效,一个常见的错误是调用t.sleep(),(这里的 t 是一个不同于当前线程的线程)。即便是执行 t.sleep(),也是当前线程进入睡眠,而不是t线程。t.suspend() 是过时的方法,使用 suspend() 导致线程进入停滞状态,该线程会一直持有对象的监视器,suspend() 容易引起死锁问题。

object.wait() 使当前线程出于 不可运行 状态,和 sleep() 不同的是 wait 是 object 的方法而不是 thread。调用 object.wait() 时,线程先要获取这个对象的对象锁,当前线程必须在锁对象保持同步,把当前线程添加到等待队列中,随后另一线程可以同步同一个对象锁来调用 object.notify(),这样将唤醒原来等待中的线程,然后释放该锁。基本上 wait()/notify() 与 sleep()/interrupt() 类似,只是前者需要获取对象锁。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

罗罗贝儿

暂无简介

0 文章
0 评论
22 人气
更多

推荐作者

eins

文章 0 评论 0

世界等同你

文章 0 评论 0

毒初莱肆砂笔

文章 0 评论 0

初雪

文章 0 评论 0

miao

文章 0 评论 0

qq_zQQHIW

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文