在上一次https://www.cnblogs.com/webor2006/p/11792954.html对于Lock的具体实现类ReentrantLock用了一个示例对它进行了一个简单的了解,而它其实里面有很多东东,不过得循序渐进一步步来,目前还不适合来从底层分析它,另外在上次对于Lock和syncronized对于同步的区别做了一个文字的总结,这里回顾一下,相当之重要:

而对于Lock这个接口其实提供的方法是比较少的,纵览一下:

其中大部分都是跟锁相关的方法,除了标红的这个是跟一个新的Condition条件相关,这也是接下来要仔细研究的东东,先来读一下该方法的javadoc,看这个东东的出现是为了解决啥问题的:

懵懵的。。没关系,才刚学嘛,这里先来对Condition的出现的原因做一个理论上的描述,得明白这个东东的一个角色这才在之后的学习中才会更加的踏实,而不至于只是API的一个学习,学完了也就学完了,不知其所以然,好,费话不多说,先来看一下理论描述:

“传统上,我们可以通过synchronized关键字 + wait + notify/notifyAll 来实现多个线程之间的协调与通信,整个过程都是由JVM来帮助我们实现的【native方法嘛】;开发者无需(也是无法)了解底层的实现细节。

从JDK 5开始,并发包提供了Lock,Condition(里面有await()与signal()/signalAll())来实现多个线程之间的协调与通信,整个过程都是由开发者来控制的,而且相比于传统方式,更加灵活,功能也更加强大。”

也就是Lock相当于原来的synchronized关键字,Condition.await()相当于原来Object.wait(),Condition.signal()或Condition.signalAll()相当于原来Object.notify()或Object.notifyAll(),而Lock和Condition是纯Java层的东东,可以人为来控制,嗯,大概了解到这么一个讯息,好,接下来咱们来读一读Condition这个接口的javadoc:

其文档说明不少,一点点去读,这样是最权威的:

读到这一句话,是不是有点逆天,也就是说有了这个Condition之后比如有10个线程,可以让前2个线程进入同一个对象的第一个等待集合当中,让中间6个线程也进入同一个对象的第二个等待集合当中,让最后2个线程进入同一个对象的第三个等待集合当中。。貌似颠覆了对于Object.wait()的行为,我们知道对于Object.wait()只会存于当前对象的同一个等待集合中,也就是Condition要比传统的方式要灵活很多,这也是一个非常大的改进,好,继续阅读:

好,先关于这块的javadoc先分析到这~下次继续学习。

Java精通并发-Condition详解及相比于传统线程并发模式的改进的更多相关文章

  1. 最强Java并发编程详解:知识点梳理,BAT面试题等

    本文原创更多内容可以参考: Java 全栈知识体系.如需转载请说明原处. 知识体系系统性梳理 Java 并发之基础 A. Java进阶 - Java 并发之基础:首先全局的了解并发的知识体系,同时了解 ...

  2. Java并发之AQS详解

    一.概述 谈到并发,不得不谈ReentrantLock:而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)! 类如其名,抽象的队列式的同步器,AQ ...

  3. Java并发之AQS详解(转)

    一.概述 谈到并发,不得不谈ReentrantLock:而谈到ReentrantLock,不得不谈AbstractQueuedSynchronized(AQS)! 类如其名,抽象的队列式的同步器,AQ ...

  4. Java中日志组件详解

    avalon-logkit Java中日志组件详解 lanhy 发布于 2020-9-1 11:35 224浏览 0收藏 作为开发人员,我相信您对日志记录工具并不陌生. Java还具有功能强大且功能强 ...

  5. Java 8 Stream API详解--转

    原文地址:http://blog.csdn.net/chszs/article/details/47038607 Java 8 Stream API详解 一.Stream API介绍 Java8引入了 ...

  6. storm源码之理解Storm中Worker、Executor、Task关系 + 并发度详解

    本文导读: 1 Worker.Executor.task详解 2 配置拓扑的并发度 3 拓扑示例 4 动态配置拓扑并发度 Worker.Executor.Task详解: Storm在集群上运行一个To ...

  7. Java的JDBC事务详解

    Java的JDBC事务详解         分类:             Hibernate              2010-06-02 10:04     12298人阅读     评论(9) ...

  8. Java编程配置思路详解

    Java编程配置思路详解 SpringBoot虽然提供了很多优秀的starter帮助我们快速开发,可实际生产环境的特殊性,我们依然需要对默认整合配置做自定义操作,提高程序的可控性,虽然你配的不一定比官 ...

  9. Java输出流FileOutputStream使用详解

    Java输出流FileOutputStream使用详解 http://baijiahao.baidu.com/s?id=1600984799323133994&wfr=spider&f ...

随机推荐

  1. 使用Shell上传/下载文件

    来源:https://www.cnblogs.com/pcyy/p/7568820.html 1,安装lrzsz工具包 yum  install lrzsz 2,安装完成后 输入rz选择文件进行上传

  2. JVM学习笔记1

    1.运行时数据结构 2.堆分代 3.垃圾收集器 Parallel Scavenge收集器:新生代称为PSYoungGen,老年代称为ParOldGen,永久代称为Metaspace ParNew收集器 ...

  3. SDK-基于Windows环境搭建

    SDK安装配置 前言:相信很多小伙伴还不会搭SDK,近日一位前同事询问我SDK怎么搭建了?不妨看看吧,小编是基于appium. 1.下载SDK:http://tools.android-studio. ...

  4. 19条常用的MySQL优化方法(转)

    本文我们来谈谈项目中常用的MySQL优化方法,共19条,具体如下:1.EXPLAIN命令做MySQL优化,我们要善用EXPLAIN查看SQL执行计划.下面来个简单的示例,标注(1.2.3.4.5)我们 ...

  5. Mysql 工具mysqlbinlog

    [1]mysqlbinlog工具 在Windows环境下,安装完成Mysql后,在安装目录bin下会存在mysqlbinlog.exe应用程序. binlog是二进制内容文件,人类是无法直视的.而my ...

  6. C#异步的世界【下】(转)

    接上篇:<C#异步的世界[上]> 上篇主要分析了async\await之前的一些异步模式,今天说异步的主要是指C#5的async\await异步.在此为了方便的表述,我们称async\aw ...

  7. JavaIO学习:字符流

    JavaIO流之字符流 字符流 Reader InputStreamReader FileReader:专门用于处理文件的字符读取流对象. Writer OutputStreamWriter File ...

  8. 【02】Kubernets:使用 kubeadm 部署 K8S 集群

    写在前面的话 通过上一节,知道了 K8S 有 Master / Node 组成,但是具体怎么个组成法,就是这一节具体谈的内容.概念性的东西我们会尽量以实验的形式将其复现. 部署 K8S 集群 互联网常 ...

  9. 深入V8引擎-初始化之InitPlatform

    上一篇其实想讲初始化的第二步,但是内容比较无聊,所以换了一个话题,谈了谈v8的命名空间和宏,稍微轻松一下. 在这里还是接着说说初始化过程,毕竟写博客的初衷是对自己努力的记录,不是为了吸粉,这篇没图,对 ...

  10. Blend 阴影 倒影 模糊效果

    原文:Blend 阴影 倒影 模糊效果 1)阴影 和模糊效果很简单 在Blend的面板效果中就有体现 直接拖拽到控件即可 2)文本加圆角 需要一个布局控件Border 设置属性CornerRadius ...