9.21. Sleep().suspend() 和 wait() 之间有什么区别
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论