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