打赏
摘要: 基于AQS的前世今生,来学习并发工具类Semaphore。本文将从Semaphore的应用场景、源码原理解析来学习这个并发工具类。 1、 应用场景 Semaphore用来控制同时访问某个特定资源的操作数量,或者同时执行某个指定操作的数量。还可以用来实现某种资源池限制,或者对容器施加边界。 1.1 当 阅读全文
posted @ 2018-09-22 09:58 lingjiango 阅读(6359) 评论(1) 推荐(0) 编辑
摘要: 基于AQS的前世今生,来学习并发工具类ReentrantReadWriteLock。本文将从ReentrantReadWriteLock的产生背景、源码原理解析和应用来学习这个并发工具类。 1、 产生背景 前面我们学习的重入锁ReentrantLock本质上还是互斥锁,每次最多只能有一个线程持有Re 阅读全文
posted @ 2018-09-12 22:52 lingjiango 阅读(938) 评论(0) 推荐(1) 编辑
摘要: 在日常的Java开发中,位运算使用的不多,使用的更多的是算数运算(+、-、*、/、%)、关系运算(<、>、<=、>=、==、!=)和逻辑运算(&&、||、!),所以相对来说对位运算不是那么熟悉,本文将以Java的位运算来详细介绍下位运算及其应用。 1、 位运算起源 位运算起源于C语言的低级操作,Ja 阅读全文
posted @ 2018-09-03 00:01 lingjiango 阅读(2304) 评论(0) 推荐(3) 编辑
摘要: 上文已经总结了AQS的前世今生,有了这个基础我们就可以来进一步学习并发工具类。首先我们要学习的就是ReentrantLock,本文将从ReentrantLock的产生背景、源码原理解析和应用来学习ReentrantLock这个并发工具类。 1、 产生背景 前面我们已经学习过了synchronized 阅读全文
posted @ 2018-08-25 22:54 lingjiango 阅读(7045) 评论(1) 推荐(2) 编辑
摘要: 在具备了volatile、CAS和模板方法设计模式的知识之后,我们可以来深入学习下AbstractQueuedSynchronizer(AQS),本文主要想从AQS的产生背景、设计和结构、源代码实现及AQS应用这4个方面来学习下AQS,文章耗时一个月,所以篇幅有点长,需要一点耐心。 1、AQS产生背 阅读全文
posted @ 2018-08-12 21:03 lingjiango 阅读(27014) 评论(5) 推荐(13) 编辑
摘要: 在学完volatile和CAS之后,近几天在撸AbstractQueuedSynchronizer(AQS)的源代码,很多并发工具都是基于AQS来实现的,这也是并发专家Doug Lea的初衷,通过写一个这样的基础工具来提高j.u.c的灵活性。具体可以看这篇论文的一段原文,我摘录一下: As is w 阅读全文
posted @ 2018-07-22 14:41 lingjiango 阅读(2131) 评论(0) 推荐(3) 编辑
摘要: 上一篇文章,学习了并发编程中的volatile,最后取了网上流传很广的一张图来结尾,从图中可以看出除了volatile变量的读写,还有一个叫做CAS的东西,所以这篇文章再来学习CAS。 1、 并发编程三要素-原子性、可见性、有序性 在讨论CAS前,我想先讨论一下并发编程的三要素,这个应该可以帮助理解 阅读全文
posted @ 2018-07-15 21:15 lingjiango 阅读(3211) 评论(0) 推荐(1) 编辑
摘要: 上一篇文章,学习了并发编程中的synchronized,这个比较好理解,也是我最初学习多线程编程中的一个简单的实现的,大学的时候就会了,然后就一直以为多线程环境的同步只能通过这个来实现的,事实上Java还提供了另外一个更加轻量级的实现-volatile,如果说synchronized实现了数据在同一 阅读全文
posted @ 2018-07-08 17:29 lingjiango 阅读(5952) 评论(1) 推荐(1) 编辑
摘要: 这是Java并发编程学习的第一篇,最早在2013年时便励志要把JAVA的并发编程好好学习一下,那个时候才工作一年。后来由于各种各样的原因,未能学习起来,5年时间过去,技术止步不前,学到的都是业务领域知识,站在我个人发展角度,我希望在技术,主要是JAVA后端技术领域再往前走一步,所以在这里记录下我学习 阅读全文
posted @ 2018-06-16 15:16 lingjiango 阅读(3029) 评论(2) 推荐(3) 编辑
摘要: TCP VS UDP 相同点: 首部都包含了16位的源端口号、目的端口号和校验和。都是基于IP协议的传输层协议。 图一 TCP首部 图二 UDP首部 差异点: 1、 连接:TCP是面向连接的,需要通过三次握手建立连接,数据交互还有ACK机制,UDP没有连接的概念; 2、 可靠:TCP是可靠的,UDP 阅读全文
posted @ 2018-05-20 21:38 lingjiango 阅读(588) 评论(0) 推荐(0) 编辑