Sleep(),suspend()和wait()之间有什么区别呢?
下文笔者讲述线程中Sleep(),suspend()和wait()方法的区别说明,如下所示:
Thread.sleep()方法的功能:
Thread.sleep()的功能:
使当前线程在指定的时间处于“非运行”(Not Runnable)状态
线程一直持有对象的监视器
如一个线程当前在一个同步块或同步方法中,其它线程不能进入该块或方法中
如果另一线程调用了interrupt()方法,它将唤醒那个“睡眠的”线程。
注意事项:
sleep()是一个静态方法
这意味着只对当前线程有效
一个常见的错误是调用t.sleep()
(这里的t是一个不同于当前线程的线程)
即便是执行t.sleep(),也是当前线程进入睡眠,而不是t线程
t.suspend()是过时的方法,
suspend()方法简介说明
suspend()方法的功能: 导致线程进入停滞状态, 该线程会一直持有对象的监视器 suspend()容易引起死锁问题
object.wait()方法的功能
object.wait()的功能:
使当前线程出于“不可运行”状态
和sleep()不同的是wait是object的方法而不是thread
调用object.wait()时,线程先要获取这个对象的对象锁
当前线程必须在锁对象保持同步,把当前线程添加到等待队列中,随后另一线程可以同步同一个对象锁来调用object.notify(),
这样将唤醒原来等待中的线程,
然后释放该锁
基本上wait()/notify()与sleep()/interrupt()类似,只是前者需要获取对象锁。
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


