丛林探险
丛林探险
JOHN!
这个作者很懒,什么都没留下…
展开
-
ReentrantLock与ConditionObject 管程模型的实现
背景在并发编程领域,有两个核心问题:一是互斥,即同一时刻只允许一个线程访问共享资源;另一个是同步,即线程之前如何通信的问题。这两个问题通过监视器都可以解决。监视器的结构如下图所示:Java目前是提供了两个监视器的实现,一个是synchronized ,另一个是并发包下的ReentrantLock类。本文简要分析一下ReentrantLock是如何实现监视器模型?ReentrantLockReentrantLock实现了Lock接口,提供了加锁、解锁和创建条件等待队列的方法。结构上Reentra原创 2020-06-30 23:09:22 · 294 阅读 · 0 评论 -
PriorityQueue的堆排序算法实现
背景完全二叉树:只缺少最后一层靠右边节点的二叉树为完全二叉树。堆:特定排序规则下的完全二叉树。堆分为最大堆与最小堆,最小堆的特点就是父节点的值小于其子节点,最大堆的特点就是父节点的值大于其子节点。树这个逻辑结构可以用数组来存储,同理完全二叉树可以用数组来存储。由于完全二叉树这种逻辑结构决定了父子节点的数组下标存在函数关系,假设子节点数组下标为i,则父节点的数组下标为 (i-1) >>>1,这个可以简单证明出来,如下:证明:假设父节点位于树的第 n 层并距离n层第一个元素有m个原创 2020-06-29 21:31:31 · 456 阅读 · 0 评论 -
ConcurrentLinkedQueue非阻塞算法的实现
背景ConcurrentLinkedQueue 是一个并发安全的非阻塞队列。本质利用自旋CAS的方式来完成入队和出队的操作,但是走的不是一般的玩法。普通的非阻塞算法以下是我本人实现的利用自旋CAS来实现并发安全得入队和出队操作。设计思想是 每次出队后head指针指向队列头部,每次入队后tail指针指向队列尾部。这个实现简洁明了,但是无奈Doug Lea 觉得太辣鸡,他还想再优化一下…public class NonLockQueue<T> extends AbstractQueue&原创 2020-06-27 20:05:37 · 209 阅读 · 0 评论 -
LinkedBlockingQueue的双锁算法
背景LinkedBlockingQueue是JAVA并发包下的一个常用的线程安全的队列。这个队列挺有意思的,因为在没看它的源码之前,我以前它就是简单的用一把锁来控制队列的入队与出队。但实际它的设计更加巧妙,它用了两把锁来分别控制队列的入队与出队, 之为双锁算法。双锁算法要想实现入队和出队分别用两把锁来控制,那入队和出队操作的必须是不同的变量,否则会有线程安全问题。那又如何让入队和出队操作不同的变量呢?首先看一下常见的队列操作: /** * 队尾入队 * 当队列中没有元原创 2020-06-24 17:14:37 · 1282 阅读 · 3 评论 -
丛林探险之Spring自定义注解加载Bean
自定义注解加载Bean是Spring框架提供的一个扩展点。基于这个扩展点可以实现灵活加载Bean的功能。例如 Dubbo框架通过这个扩展点将添加了自定义注解@org.apache.dubbo.config.annotation.Service和@org.apache.dubbo.config.annotation.Reference的类加载到Spring的Ioc容器中。今天我们像Dubbo框架一样自定义注解和必要的处理类来演绎自定义注解加载到Ioc容器的过程。原创 2020-05-08 00:57:05 · 800 阅读 · 1 评论 -
丛林探险之Dubbo远程调用
本期丛林探险Dubbo框架,Dubbo框架是一款出色的RPC框架,咋们这次研究他的核心-RPC调用原创 2020-04-14 23:38:43 · 248 阅读 · 4 评论 -
丛林探险之Tomcat的连接器
丛林探险 tomcat连接器原创 2020-01-19 15:46:03 · 999 阅读 · 3 评论