线程间通信--"wait/notify"机制

"wait/notify"机制:等待/通知机制,wait使线程暂停运行,而notify 使暂停的线程继续运行

使用wait ,notify 和 notifyAll 时需要先对调用对象加锁

  1. 调用wait 方法后,线程状态有 Running 变为 Waiting,并将当前线程放置到对象的 等待队列
  2. notify或者 notifyAll 方法调用后, 等待线程依旧不会从 wait 返回,需要调用 noitfy 的线程释放锁之后,等待线程才有机会从 wait 返回
  3. notify方法将等待队列的一个等待线程从等待队列种移到同步队列中,而 notifyAll 方法则是将等待队列种所有的线程全部移到同步队列,被移动的线程状态由 Waiting 变为 Blocked
  4. 从 wait 方法返回的前提是获得了调用对象的锁

多线程中wait和sleep方法的区别

  1. wait是Object的方法,而sleep是Thread的方法
  2. sleep方法不会释放锁,时间过后会自动唤醒或interrupt强行打断
    wait方法会释放锁,可以设置超时时间,时间过后自动唤醒或其他线程调用notify/notifyAll
  3. wait、notify、notifyAll只能在同步控制方法或同步控制块中使用,而sleep可以任何地方使用
  4. sleep必须捕获异常(InterruptedException),wait、notify、notifyAll则不用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值