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()类似,只是前者需要获取对象锁。
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。