sleep()与wait()的区别

一、共同点

  • 都可以使线程暂停执行: wait() 方法和 sleep() 方法都可以使当前线程暂停执行一段时间。
  • 都可以用于多线程编程: 无论是 wait() 还是 sleep(),都可以在多线程环境中使用。
  • 都可以在同步块或同步方法中使用: wait() 方法通常与 synchronized 关键字一起使用,因为它需要在同步块或同步方法中调用。而 sleep() 方法可以在任何地方使用,不受同步的限制。
  • 都可以捕获 InterruptedException 异常: 调用 wait() 或 sleep() 方法时,都可能抛出 InterruptedException 异常,因此在使用这两个方法时都需要处理这个异常。

二、不同点

sleepwait
所属类Thread 线程类Object 顶级类
方法类型静态方法普通方法
释放对象锁
调用后状态让出CPU给其他线程,但是他的监控状态依然保持进入等待此对象的等待锁定池
恢复运行条件设定的时间到后自动苏醒未指定超时时间时,不会自动苏醒,需要别的线程调用同一个对象上的 notify()或者 notifyAll() 方法,本线程才进入对象锁定池准备获取对象锁从而进入运行状态;指定了超时时间wait(long timeout) 时,超时后线程会自动苏醒。
应用场景可以在任何地方使用只能在同步方法或者同步块中使用。

sleep(time)所设定的时间到后,线程不一定立即苏醒,这是由于CPU的调度原因,线程恢复运行后会进入就绪状态,CPU不一定会立刻分配时间片给该线程,因此,线程苏醒后将会在≥time的时间运行。

即:假设调用sleep(1000),线程将会在≥1000ms后继续运行。

注意,wait()在接收到针对此对象的notify()或者 notifyAll() 方法后,是准备获取对象锁,进入运行状态,而不是立即获得。

  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值