栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

多线程面试题----sleep和wait区别

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

多线程面试题----sleep和wait区别

        Thread类中sleep()在java8官方文档中解释如下:

static voidsleep(long millis)

使当前正在执行的线程以指定的毫秒数暂停(暂时停止执行),具体取决于系统定时器和调度程序的精度和准确性。

static voidsleep(long millis, int nanos)

导致正在执行的线程以指定的毫秒数加上指定的纳秒数来暂停(临时停止执行),这取决于系统定时器和调度器的精度和准确性。

        由此可见,sleep在Thread类中是一个返回值为空的静态方法。其方法能让正在执行的线程暂时进入指定毫秒数的暂停,并返回一个InterruptedException的异常。

注:Thread类中sleep(long millis)并不能通过传入0或1来实现永久等待,这样的代码并无意义.


public final void wait(long timeout)       //超时timeout毫秒
                throws InterruptedException

        根据java8官方文档:Thread类中wait(long timeout)导致当前线程等待,直到另一个线程调用此对象的notify()方法或notifyAll()方法或指定timeout的时间已过。 

        此外,Thread类中还存在两个与其构成重载的方法:

​public final void wait()
                throws InterruptedException   //相当于wait(0),线程等待,直至只能由另一个线程调               
                                              //用该对象的notify()方法或notifyAll()方法


public final void wait(long timeout,        
                       int nanos)          //由timeout毫秒加nanos纳秒参数指定的超时时间已过。
          throws InterruptedException     //timeout - 以毫秒为单位等待的最长时间。 
                                          //nanos - 额外的时间,以纳秒范围0-999999。
                                              //具体计算方式1000000*timeout+nanos (单位:纳秒)

注意:wait方法,因为它将当前线程放入该对象的等待集,仅解锁此对象; 当前线程可以同步的任何其他对象在线程等待时保持锁定。该方法只能由作为该对象的监视器的所有者的线程调用。 有关线程可以成为监视器所有者的方法的说明,请参阅notify方法.

综上所述:

sleep和wait的区别:

                区别

方法名 

声明位置        使用场景不同是否释放同步监视器
sleep属于Thread类   任何场景都能调用释放锁
wait属于Object类必须在同步代码块或同步方法中不会释放锁


 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/530840.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号