(5)线程间通信

同步阻塞和异步非阻塞

同步阻塞
会造成等待时间长、系统吞吐量不高、线程频繁的创建开启与销毁、导致CPU频繁切换,降低系统性能。
异步非阻塞
客户端不用等待结果才返回、提高了系统的吞吐量和并发量、线程重复利用。

wait 和 notify

wait

  • wait 方法会使当前线程阻塞。
  • wait 方法必须拥有该对象的 monitor ,也就是 wait 方法必须在同步方法中使用。
  • wait 方法执行后,会放弃对该 monitor的所有权且进入与该对象关联的 wait set(线程休息室) 中。
  • wait 方法执行后,可使用 notifynotifyAll 唤醒线程,线程会继续执行,重新获得 monitor ,即从 wait 方法后继续执行。
  • wait 方法必须是 monitor 的对象,即 synchronized(object){object.wait();} 中 两个 object 必须为同一个对象。
  • wait 的方法是可中断方法。

notify

  • 唤醒等待在该线程上的 wait 的对象。
  • 线程进入阻塞则被唤醒,如果没有则忽略。

wait 和 sleep

  1. wait 和 sleep 方法都可以使线程进入阻塞状态。
  2. wait 和 sleep 方法均是可中断方法,被中断后都会收到中断异常。
  3. wait 和 Object 的方法,而 sleep 是 Thread 特有的方法。
  4. wait 方法的执行必须在同步方法中进行,而 sleep 则不需要。
  5. 线程在同步方法中执行 sleep 方法时,并不会释放 monitor 的锁,而 wait 方法则会释放 monitor 的锁。
  6. sleep 方法短暂休眠之后会主动退出阻塞,而 wait 方法(没有指定 wait 时间)则需要被其他线程中断后才能退出阻塞。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值