我把前面的整个分解的图再通过一张整体的结构图来表述,线程awaitThread先通过lock.lock()方法获取锁成功后调用了condition.await方法进入等待队列,而另一个线程signalThread通过lock.lock()方法获取锁成功后调用了condition.signal或者signalAll方法,使得线程awaitThread能够有机会移入到同步队列中,当其他线程释放lock后使得线程awaitThread能够有机会获取lock,从而使得线程awaitThread能够从await方法中退出执行后续操作。如果awaitThread获取lock失败会直接进入到同步队列。

阻塞:await()方法中,在线程释放锁资源之后,如果节点不在AQS等待队列,则阻塞当前线程,如果在等待队列,则自旋等待尝试获取锁

释放:signal()后,节点会从condition队列移动到AQS

等待队列,则进入正常锁的获取流程

了解完Lock以及Condition之后,意味着我们对于J.U.C里面的锁机制以及线程通信机制有了一个全面和深入的了解,接下来我们来看看其他比较常用的一些工具

Condition总结-await和signal的总结相关推荐

  1. Java并发编程,Condition的await和signal等待通知机制

    Condition简介 Object类是Java中所有类的父类, 在线程间实现通信的往往会应用到Object的几个方法: wait(),wait(long timeout),wait(long tim ...

  2. java await signal_【Java并发008】原理层面:ReentrantLock中 await()、signal()/signalAll()全解析...

    一.前言 上篇的文章中我们介绍了AQS源码中lock方法和unlock方法,这两个方法主要是用来解决并发中互斥的问题,这篇文章我们主要介绍AQS中用来解决线程同步问题的await方法.signal方法 ...

  3. 生产者与消费者(二)---await与 signal

    前面阐述了实现生产者与消费者问题的一种方式:wait() / notify()方法,本文继续阐述多线程的经典问题---生产者与消费者的第二种方式:await() / signal()方法. await ...

  4. 多线程:线程之间的协作(join、wait、notify、notifyAll、await、signal、signalAll)

    当多个线程可以一起工作去解决某个问题时,如果某些部分必须在其它部分之前完成,那么就需要对线程进行协调. join() 在线程中调用另一个线程的 join() 方法,会将当前线程挂起,而不是忙等待,直到 ...

  5. Condition的await()方法

    public final void await() throws InterruptedException {if (Thread.interrupted())throw new Interrupte ...

  6. ReentrantLock和Condition理解及应用

    Condition: Condition是一个多线程间协调通信的工具类,使得某个,或者某些线程一起等待某个条件(Condition),只有当该条件具备( signal 或者 signalAll方法被带 ...

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

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

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

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

  9. JUC锁-Condition(三)

    Condition介绍 Condition的作用是对锁进行更精确的控制.Condition中的await()方法相当于Object的wait()方法,Condition中的signal()方法相当于O ...

最新文章

  1. windows api中文文档_Web服务开发:Spring集成Swagger,3步自动生成API文档
  2. PostgreSQL 表达式索引 - 语法注意事项
  3. spark和python的关系_spark submit和pyspark有什么区别?
  4. 现在上学有点赛博朋克内味儿了
  5. 什么是API文档?--斯科特·马文
  6. Django中的prefetch_related()函数优化
  7. 2021年中国电力线通信(PLC)市场趋势报告、技术动态创新及2027年市场预测
  8. 导航系统辅助设备行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  9. asp.net 生成图形验证码(字母和数字混合)
  10. 微信支付H5完整版代码
  11. 全国省市区县json数据
  12. get请求和post请求参数中文乱码的解决办法
  13. Jmeter使用CSV文件读取大量测试数据
  14. 解决微信小程序Android与iOS系统获取蓝牙广播包中deviceid不同的办法
  15. 垃圾收集器和内存分配策略
  16. EtherCAT 之邮箱
  17. Kali Rolling Virtualbox5 SSH+Guest Addition增强包
  18. js-sha1实现SHA1加密
  19. InfluxDB2.2及Influx安装
  20. 牛B的人到处都是(打击的一沓糊涂)

热门文章

  1. 【转】jmeter响应结果乱码问题
  2. 70.Climbing Stairs
  3. 数据库 chapter 12 数据库管理系统
  4. K-means的缺点(优化不仅仅是最小化误差)
  5. zigbee 编译source_zigbee_sensor_monitor_v1_2_1 vs2008 qt-win-opensource-src-4.4.3
  6. i2c--insmod
  7. 如何判断一个字符串的编码类型?
  8. sharepoint Lists Web service 用法
  9. js运算符+运算方式
  10. redis系列:通过队列案例学习list命令