Sleep(),suspend()和wait()之间有什么区别呢?

杨采妮 Java面经 发布时间:2022-05-27 09:26:25 阅读数:10175 1
下文笔者讲述线程中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()类似,只是前者需要获取对象锁。
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaMianJing/202205/16536148213530.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者