您当前的位置:首页 > 计算机 > 编程开发 > Java

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

时间:12-14来源:作者:点击数:

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() 类似,只是前者需要获取对象锁。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐