Java线程问题:sleep() 方法和wait() 方法的异同(区别)

前言

这个问题其实也是面试过程中的一个高频面试题目,考察的异同基本是两个的使用和锁的区别,同时这两个方法也是我们使用Java并发编程中较为常见的方法。

那么,这两个方法有什么区别呢?

主要如下的几个异同:

  1. 作用相同两个方法都是控制线程的暂停,进入休眠状态。
  2. wait方法通常被用于线程间交互/通信,sleep方法通常被用于暂停执行。
  3. 所属类不同:sleep方法属于线程(Thread)类的静态本地(native)方法,而wait方法属于Object类的本地(native)方法。
  4. 语法不同:sleep方法不依赖于同步器synchronized,但是wait方法需要依赖synchronized关键字。
  5. 参数不同:sleep方法必须设置参数时间,wait方法可以不设置时间,不设置将一直休眠。
  6. 释放锁资源不同:sleep方法不会释放lock,但是wait会释放,而且会加入到等待队列中。
  7. 唤醒方式不同: wait() 方法被调用后,线程不会自动唤醒,需要别的线程调用同一个对象上的 notify()或者 notifyAll() 方法。sleep()方法执行完成后,线程会自动唤醒,或者也可以使用 wait(long timeout) 超时后线程会自动唤醒。
  8. 线程进入状态不同:调用sleep 方法线程会进入TIMED_WAITING 有时限等待状态,而调用无参数的 wait 方法,线程会进入WAITING无时限等待状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值