线程间通信模型

volatile 和 synchrnoized 关键字进行线程通信

volatile 关键字通过内存原语实现线程间通信(隐式通信,写后将其他线程本地内存无效化)。

synchrnoized 关键字是对对象的监视器(monitor)进行上锁,此方式是排他的。

对象、监视器、同步对象和执行线程的关系:

任意线程对 Object 的访问,首先要获得 Object 的监视器。如果获取失败,线程进入同步队列等待,线程状态变为 BLOCKED。当访问 Object 的前驱释放了锁,则该释放操作唤醒阻塞在同步队列中的线程,使其重新尝试对监视器的获取。

对象、监视器、同步对象和执行线程的关系

等待/通知机制

wait()、notify() 和 notifyAll() 实现等待/通知模型注意:

  1. 使用 wait()、notify() 和 notifyAll() 时需要先对调用对象加锁。
  2. 调用 wait() 方法后,线程状态由 RUNNING 变为 WAITING,并将当前对象放置到对象的等待队列。
  3. notify() 或 notifyAll() 方法调用后,等待线程依旧不会从 wat() 返回,需要调用 otify() 或 notifyAll() 方法的线程释放锁之后,等待线程才有机会从 wait() 返回。
  4. notify() 方法将等待队列的一个等待线程从等待队列中移到同步线程中,而 notifyAll() 方法则是将所有等待线程从等待队列中移到同步线程中,被移动的线程状态由 WAITING 变为 BLACKED。
  5. 从 wait() 方法返回的前提是获得了调用对象的锁。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值