首先,我们要清楚的是wait/notify操作是一种线程间同步机制。为什么要同步?因为多个线程要并发的访问同一共享变量,所以需要线程间同步,防止他们之间相互冲突。同步的关键字是synchronized,并没有明确的锁的语义。下面是一张线程的生命周期的图:

wait的原理图:

是释放锁以后再进入等待队列,还是进入等待队列以后再释放锁?这里有一个疑问。我们看一下ObjcetMonitor.cpp源码中,我们发现wait的源码如下:

我们发现其实是需要先把线程加入到等待队列,然后再释放锁。那么,我们是不是可以这样说,一个线程只有获取到锁以后才能加入等待队列,所以wait执行的时候要先获取到锁?

Java并发编程—为什么wait/notify操作要先获取到锁?相关推荐

  1. Java并发编程(7):使用synchronized获取互斥锁的几点说明

    在并发编程中,多线程同时并发访问的资源叫做临界资源,当多个线程同时访问对象并要求操作相同资源时,分割了原子操作就有可能出现数据的不一致或数据不完整的情况,为避免这种情况的发生,我们会采取同步机制,以确 ...

  2. Java并发编程-wait和notify原理剖析

    目录 1.小故事 - 为什么需要 wait 2.wait & notify工作原理 3.API 介绍 4.wait和notify的正确姿势 4.1.sleep(long n) 和 wait(l ...

  3. java并发编程(二)多个线程多个锁

    多个线程多个锁 多个线程多个锁:多个线程,每个线程都可以拿到自己制定的锁,分别获得锁之后,执行synchronized方法体的内容.就是在上次那个博客上说道的锁竞争的问题,是因为所有的线程过来以后都争 ...

  4. # Java 并发编程的艺术(二)

    Java 并发编程的艺术(二) 文章目录 Java 并发编程的艺术(二) 并发编程的挑战 上下文切换 如何减少上下文的切换 死锁 资源限制的挑战 Java 并发机制的底层实现原理 volatile 的 ...

  5. aqs clh java_【Java并发编程实战】—– AQS(四):CLH同步队列

    在[Java并发编程实战]-–"J.U.C":CLH队列锁提过,AQS里面的CLH队列是CLH同步锁的一种变形. 其主要从双方面进行了改造:节点的结构与节点等待机制.在结构上引入了 ...

  6. 19、Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition

    Java并发编程:线程间协作的两种方式:wait.notify.notifyAll和Condition 在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者 ...

  7. Java并发编程—线程间协作方式wait()、notify()、notifyAll()和Condition

    原文作者:Matrix海 子 原文地址:Java并发编程:线程间协作的两种方式:wait.notify.notifyAll和Condition 目录 一.wait().notify()和notifyA ...

  8. Java并发编程—notify和notifyAll有什么区别?

    原文作者:知乎用户 原文地址:https://www.zhihu.com/question/37601861/answer/145545371 著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...

  9. Java并发编程71道面试题及答案

    Java并发编程71道面试题及答案 1.在java中守护线程和本地线程区别? java中的线程分为两种:守护线程(Daemon)和用户线程(User). 任何线程都可以设置为守护线程和用户线程,通过方 ...

最新文章

  1. ASP组件AspJpeg(加水印)
  2. Platforms/iPhoneSimulator.platform/Developer/usr/bin/g++-4.2 failed with exit code 1问题总结及解决方案...
  3. Codeforces Round #174 (Div. 2) Cows and Primitive Roots(数论)
  4. P3714 [BJOI2017]树的难题
  5. sqlserver导入execl数据ACE.OLEDB.12.0错误
  6. geth+remix+metamask 实现私有链智能合约部署
  7. 新手福音︱正则表达式小工具RegExr
  8. CENTOS利用Keepalived构建双主MySQL+双机热备
  9. go map二维数据追加
  10. 最新emoji表情代码大全_抖音不用考虑我我没感受铁打的图片,最新表情包高清大全[多图]-软件教程...
  11. emmagee邮件设置
  12. TreeMap通过值对象属性排序
  13. 应届生年薪 40w 在杭州可以过上什么样的生活?
  14. js获取传统节假日_js判断节假日实例代码
  15. 网络适配器突然消失的解决办法
  16. 浏览器是如何渲染网页的《学如逆水行舟,不进则退》
  17. C64+ cache资料集(更新中)
  18. 计算机图学实验报告,计算机图形学实验报告实验1
  19. 3.Spring Boot使用Apache Curator实现leader选举「第四章 ZooKeeper Curator应用场景实战」「架构之路ZooKeeper理论和实战」
  20. 佟大为漂亮可爱女儿首度曝光(图)

热门文章

  1. tableView的单选问题
  2. angularJs跨域
  3. ATL 核心COM继承类之IDispatchImpl及调用
  4. PHP 学习 第一天
  5. 关于如何在github上创建团队开发环境
  6. 升级jquery-easyui1.4.5后treegrid无法显示
  7. 十四个值得推荐的个人提升方法
  8. linux命令-- 抓包
  9. 没有测量,就没有管理
  10. 最新卡通渲染效果图(附带一张次世代帅哥)