开发者社区 问答 正文

sleep() 和 wait() 有什么区别?

sleep() 和 wait() 有什么区别?

展开
收起
问问小秘 2020-01-03 13:57:24 737 分享 版权
来自: Java开发者
1 条回答
写回答
取消 提交回答
  • sleep():当前线程会放弃cpu,但是不会放弃同步锁

    wait(): 当前线程放弃cpu同时会放弃互斥锁

    sleep():方法是线程类(Thread)的静态方法,让调用线程进入睡眠状态,让出执行机会给其他线程,等到休眠时间结束后,线程进入就绪状态和其他线程一起竞争cpu的执行时间。因为sleep() 是static静态的方法,他不能改变对象的机锁,当一个synchronized块中调用了sleep() 方法,线程虽然进入休眠,但是对象的机锁没有被释放,其他线程依然无法访问这个对象。

    wait():wait()是Object类的方法,当一个线程执行到wait方法时,它就进入到一个和该对象相关的等待池,同时释放对象的机锁,使得其他线程能够访问,可以通过notify,notifyAll方法来唤醒等待的线程

    2020-01-03 13:57:37
    赞同 展开评论
问答地址: