摘要: 前面一篇分析了ReentrantLock的方法和内部类,我们了解到它里面并没有定义state属性、exclusiveOwnerThread属性、acquire方法等,这些都是使用AQS的。本篇着重讲AbstractQueuedSynchronizer的独占锁。一定要看完第一篇,不然很难看明白AbstractQueuedSynchronizer 阅读全文
posted @ 2020-05-26 10:45 源码猎人 阅读(173) 评论(0) 推荐(0) 编辑
摘要: AQS听起来很高大上的样子,实际上它就是AbstractQueuedSynchronizer类的缩写,它是构建锁或者其他同步组件的基础框架。在基于AQS构建的同步器中,只能在一个时刻发生阻塞,从而降低上下文切换的开销,提高了吞吐量。同时在设计AQS时充分考虑了可伸缩行,因此J.U.C中所有基于AQS构建的同步器均可以获得这个优势。 阅读全文
posted @ 2020-05-25 14:43 源码猎人 阅读(132) 评论(0) 推荐(0) 编辑
摘要: BFT拜占庭容错不是指一种算法,而是解决拜占庭将军问题的一类算法。分布式一直性算法选择最简单的BFT拜占庭容错,作为一致性算法入门一定能事半功倍。在分布式(一)中我们了解了一些基本理论,我们知道在有分区存在的情况下不能能出现完美的可用性和数据一致性,我们在项目中必须要最大限度做到分布式一致性,同时又要保证系统性能,所以必须了解分布式一致性算法。 阅读全文
posted @ 2020-05-17 14:50 源码猎人 阅读(515) 评论(0) 推荐(0) 编辑
摘要: JDK的atomic包中提供了一些简单原子操作类,基本上都是基于volatile+CAS封装,既保证了性能又保证了线程安全。例如平时经常用到的i++多线程场景就可以用AtomicInteger去解决,有ABA强需求的需要谨慎使用,后面会单独写一篇。 阅读全文
posted @ 2020-05-16 22:44 源码猎人 阅读(807) 评论(0) 推荐(0) 编辑
摘要: 在JAVA中,代理模式应用非常广泛,在很多框架中或平时业务中都经常使用,动态代理其实没什么神秘的,只要搞懂静态代理,在深入思考下,动态代理马上就能搞明白。 阅读全文
posted @ 2020-05-10 16:51 源码猎人 阅读(205) 评论(0) 推荐(0) 编辑
摘要: 用了这么久分布式从来没有总结过分布式理论,抽空总结一下。本篇从实际项目应用出发,从两个方面阐述分布式理论,第一个方面分布式解决什么问题,第二方面分布式带来什么问题。 阅读全文
posted @ 2020-05-10 11:42 源码猎人 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 上一篇我们介绍了ConcurrentHashMap的主干方法,本篇是ConcurrentHashMap的终篇,我们主要针对它的元素统计,扩容,元素迁移等做讲解。首先我们回顾一下前面章节,普通节点Hash为key的hash;树节点为TreeBin内部封装红黑树头节点,并且维护树,TreeBin的Hash值为-2;迁移节点ForwardingNode,它的Hash值为-1。在主干方法中对非数组修改都会锁定头节点。 阅读全文
posted @ 2020-05-02 14:15 源码猎人 阅读(148) 评论(0) 推荐(0) 编辑
摘要: 上一章我们大概了解了SqlSessionFactoryBuilder和Configuration两个类。这一章我们主要了解XMLConfigBuilder类,它是Mybatis配置文件解析入口。 阅读全文
posted @ 2020-04-30 17:30 源码猎人 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 前面一篇我们介绍了ConcurrentHashMap一些重要的内部类Node 、TreeNode、TreeBin、ForwardingNode,以及ConcurrentMap接口和ConcurrentHashMap的构造函数,本篇主要介绍ConcurrentHashMap的主干方法。 阅读全文
posted @ 2020-04-28 22:30 源码猎人 阅读(222) 评论(0) 推荐(0) 编辑
摘要: LinkedTransferQueue 是一个高效阻塞无界链表队列。和SynchronousQueue.TransferQueue(公平模式)相比,它是可以统计长度,可以进行查询的;和LinkedBlockingQueue相比,它拥有更高的性能(使用CAS自旋);和ConcurrentLinkedQueue相比,它拥有阻塞功能。 阅读全文
posted @ 2020-04-27 22:18 源码猎人 阅读(233) 评论(0) 推荐(0) 编辑