06 2018 档案

摘要:JDK 中无界优先级队列PriorityBlockingQueue 内部使用堆算法保证每次出队都是优先级最高的元素,元素入队时候是如何建堆的,元素出队后如何调整堆的平衡的? PriorityBlockingQueue是带优先级的无界阻塞队列,每次出队都返回优先级最好或者最低的元素,内部是平衡二叉树堆 阅读全文
posted @ 2018-06-26 16:34 国见比吕 阅读(1561) 评论(0) 推荐(1) 编辑
摘要:JDK 中基于数组的阻塞队列 ArrayBlockingQueue 原理剖析,ArrayBlockingQueue 内部如何基于一把独占锁以及对应的两个条件变量实现出入队操作的线程安全? 首先我们先大概的浏览一下ArrayBlockingQueue 的内部构造,如下类图: 如类图所示,可以看到Arr 阅读全文
posted @ 2018-06-24 16:58 国见比吕 阅读(874) 评论(0) 推荐(0) 编辑
摘要:JDK 中基于链表的阻塞队列 LinkedBlockingQueue 原理剖析,LinkedBlockingQueue 内部是如何使用两个独占锁 ReentrantLock 以及对应的条件变量保证多线程先入队出队操作的线程安全?为什么不使用一把锁,使用两把为何能提高并发度? LinkedBlocki 阅读全文
posted @ 2018-06-23 21:45 国见比吕 阅读(2999) 评论(0) 推荐(0) 编辑
摘要:JDK 中基于链表的非阻塞无界队列 ConcurrentLinkedQueue 原理剖析,ConcurrentLinkedQueue 内部是如何使用 CAS 非阻塞算法来保证多线程下入队出队操作的线程安全? ConcurrentLinkedQueue是线程安全的无界非阻塞队列,其底层数据结构是使用单 阅读全文
posted @ 2018-06-19 16:46 国见比吕 阅读(5343) 评论(3) 推荐(3) 编辑
摘要:StampedLock是JUC并发包里面JDK1.8版本新增的一个锁,该锁提供了三种模式的读写控制,当调用获取锁的系列函数的时候,会返回一个long 型的变量,该变量被称为戳记(stamp),这个戳记代表了锁的状态。 try系列获取锁的函数,当获取锁失败后会返回为0的stamp值。当调用释放锁和转换 阅读全文
posted @ 2018-06-16 23:27 国见比吕 阅读(5762) 评论(1) 推荐(5) 编辑
摘要:我们知道在解决线程安全问题上使用 ReentrantLock 就可以,但是 ReentrantLock 是独占锁,同时只有一个线程可以获取该锁,而实际情况下会有写少读多的场景,显然 ReentrantLock 满足不了需求,所以 ReentrantReadWriteLock 应运而生,Reentra 阅读全文
posted @ 2018-06-14 16:43 国见比吕 阅读(1774) 评论(4) 推荐(0) 编辑
摘要:ReentrantLock是可重入的独占锁,同时只能有一个线程可以获取该锁,其他获取该锁的线程会被阻塞后放入该锁的AQS阻塞队列里面。 首先我们先看一下ReentrantLock的类图结构,如下图所示: 从类图可以知道,ReentrantLock最终还是使用AQS来实现,并且根据参数决定内部是公平锁 阅读全文
posted @ 2018-06-12 16:04 国见比吕 阅读(852) 评论(1) 推荐(0) 编辑
摘要:为什么要说AbstractQueuedSynchronizer呢? 因为AbstractQueuedSynchronizer是JUC并发包中锁的底层支持,AbstractQueuedSynchronizer是抽象同步队列,简称AQS,是实现同步器的基础组件,并发包中锁的实现底层就是使用AQS实现,另 阅读全文
posted @ 2018-06-10 22:06 国见比吕 阅读(664) 评论(0) 推荐(0) 编辑
摘要:并发包中并发List只有CopyOnWriteArrayList这一个,CopyOnWriteArrayList是一个线程安全的ArrayList,对其进行修改操作和元素迭代操作都是在底层创建一个拷贝数组(快照)上进行的,也就是写时拷贝策略。 我们首先看一下CopyOnWriteArrayList的 阅读全文
posted @ 2018-06-09 20:34 国见比吕 阅读(5303) 评论(1) 推荐(2) 编辑
摘要:一.LongAdder原理 LongAdder类是JDK1.8新增的一个原子性操作类。AtomicLong通过CAS算法提供了非阻塞的原子性操作,相比受用阻塞算法的同步器来说性能已经很好了,但是JDK开发组并不满足于此,因为非常搞并发的请求下AtomicLong的性能是不能让人接受的。 如下Atom 阅读全文
posted @ 2018-06-07 19:54 国见比吕 阅读(4471) 评论(1) 推荐(4) 编辑
摘要:一.Unsafe类的源码分析 JDK的rt.jar包中的Unsafe类提供了硬件级别的原子操作,Unsafe里面的方法都是native方法,通过使用JNI的方式来访问本地C++实现库。 rt.jar 中 Unsafe 类主要函数讲解, Unsafe 类提供了硬件级别的原子操作,可以安全的直接操作内存 阅读全文
posted @ 2018-06-06 21:29 国见比吕 阅读(890) 评论(1) 推荐(2) 编辑
摘要:JDK 并发包中 ThreadLocalRandom 类原理剖析,经常使用的随机数生成器 Random 类的原理是什么?及其局限性是什么?ThreadLocalRandom 是如何利用 ThreadLocal 的原理来解决 Random 的局限性? 我们首先看Random 类及其局限性,如下: 在 阅读全文
posted @ 2018-06-04 15:49 国见比吕 阅读(767) 评论(0) 推荐(0) 编辑
摘要:多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各个操作的顺序是不可预期的,多线程访问同一个共享变量特别容易出现并发问题,特别是多个线程需要对一个共享变量进行写入时候,为了保证线程安全, 一般需要使用者在访问共享变量的时候进行适当的同步,如下图所示: 可以看到同步的措 阅读全文
posted @ 2018-06-03 22:02 国见比吕 阅读(1787) 评论(0) 推荐(2) 编辑

点击右上角即可分享
微信分享提示