Java线程面试题29-30

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

  • 1.Sleep():
    • 1.1是Thead类的一个静态方法,当一个线程调用sleep()方法,该线程会进入休眠状态,让其他线程执行,
      当休眠时间到,进入就绪状态,和其他的线程一起争抢cpu的资源
    • 1.2Sleep设计为静态的方法,并且不会释放对象锁,当synchronized代码中调用sleep方法,线程会进入休眠状态
      但是由于sleep设计为不会释放对象锁,所以其他线程只能等待该线程释放锁后才能继续执行
  • 2.wait():
    是Object的一个方法,当一个线程调用wait方法,该线程会进入和该对象相关的等待池,并且释放锁,让其他线程获取锁执行,当调用notify(),notifyAll可以唤醒该等待的线程

30:notify()和 notifyAll()有什么区别?

要理解notify()和notifyAll的区别要先理解两个概念:

  • 1:等待池:当一个线程调用wait方法,该线程会释放锁,并且进入和该对象相关的等待池,在等待池中的线程不会去竞争对象锁

  • 2:锁池:当一个线程获取到锁对象,才会执行synchronized中的代码,但是一个线程只能获取一个锁对象,其他的线程只能在锁池中等待

      区别:
       notify():随机唤醒等待池中的一个线程,进入锁池
       notifyAll():唤醒所有等待池中的线程,进入锁池
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值