![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JUC
文章平均质量分 95
yzqingqing
这个作者很懒,什么都没留下…
展开
-
@sun.misc.Contended 解决伪共享问题
先来看下什么叫做伪共享,转载自并发编程网 – ifeve.com 链接地址: 伪共享(False Sharing)缓存系统中是以缓存行(cache line)为单位存储的。缓存行是2的整数幂个连续字节,一般为32-256个字节。最常见的缓存行大小是64个字节。当多线程修改互相独立的变量时,如果这些变量共享同一个缓存行,就会无意中影响彼此的性能,这就是伪共享。缓存行上的写竞争是运行在SMP系统中...转载 2018-09-16 15:37:36 · 2428 阅读 · 0 评论 -
CountDownLatch 1.8 解析
CountDownLatch 的描述是“允许一个或者多个线程等待其他线程完成操作”下面先看一个简单的例子“出门三部曲” public static void checkGoOut() throws InterruptedException { CountDownLatch countDownLatch = new CountDownLatch(3); n...原创 2018-11-07 13:30:49 · 247 阅读 · 0 评论 -
ReentrantLock 1.8解析
ReentrantLock , 可重入锁, 和 synchronized 有着相同的内存语义接下来会比较下 这俩者之间的相同以及区别相同点:俩者有着相同的内存语义,1、当线程获取锁时,JMM会把线程对应的本地内存置为无效,然后临界区的代码从主存中读入共享变量到工作内存。2、 当线程释放锁时,JMM会把该线程对应的本地内存中的共享变量刷新到主内存中。区别在于,ReentrantLoc...原创 2018-11-01 12:25:35 · 246 阅读 · 0 评论 -
condition实现解析 1.8
任意一个java对象,都拥有一组监视器方法(定义在java.lang.Object上),主要包括wait()、wait(longtimeOut)、notify()、notifyAll()方法,这些方法与synchronized同步关键字配合,可以实现等待/通知模式.condition接口也提供了类似Object的监视器方法,与Lock配合可以实现等待/通知模式,但是这俩者在使用方法以及功能特性...原创 2018-10-24 11:41:46 · 173 阅读 · 0 评论 -
AbstractQueuedSynchronizer解析 1.8
AbstractQueuedSynchronizer简称AQS,即队列同步器。它是构建锁或者其他同步组件的基础框架(如ReentrantLock、ReentrantReadWriteLock、Semaphore等),JUC并发包的作者(Doug Lea)期望它能够成为实现大部分同步需求的基础。它是JUC并发包中的核心基础组件下面先简单的介绍下AQS中比较重要的方法//同步状态,使用者可以对这...原创 2018-10-17 19:28:17 · 275 阅读 · 1 评论 -
ConcurrentHashMap1.8解析
ConcurrentHashMap的结构和HashMap基本相同,由 数组+链表+红黑树 组成,只是在并发上面做了很多处理.先了解下重要的变量和内部类static final int MOVED = -1; // hash for forwarding nodes//数组,这里的Node有三类,链表头节点、树的根节点、ForwardingNode节点transient volati...原创 2018-10-05 17:55:00 · 1185 阅读 · 0 评论 -
HashMap解析(1.8版)
Java8 对 HashMap 进行了一些修改,最大的不同就是利用了红黑树,所以其由 数组+链表+红黑树 组成。了解下一些重要的成员变量 //tab默认容量 16 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; //tab最大容量 static final int MAXIMUM_CAPACITY =...原创 2018-10-01 00:55:53 · 126 阅读 · 0 评论 -
DelayQueue 出入队源码分析(摘自java 并发编程的艺术6.3)
DalayQueue 是一个支持延时获取元素的无界阻塞队列,队列使用PriorityQueue来实现,队列中的元素必须实现Delayed接口运用场景: 缓存系统的设计,可以保存缓存元素的有效期,一旦能从DelayQueue中获取元素,表示缓存有效期到了 定时任务调度,使用DelayQueue保存当天将会执行的任务和执行时间,一旦从DelayQueue中获取到任务就开始执行 ...原创 2018-09-13 22:44:43 · 161 阅读 · 0 评论 -
ConcurrentLinkedQueue 出入队源码分析(java 并发编程的艺术6.2章)
6.2 ConcurrentLinkedQueue 一个基于链接节点的无界线程安全队列 6.2.2 入队列 1、入队列的过程1、添加元素1,队列更新head节点的next节点为元素1节点,tail节点默认情况下等于head节点2、添加元素2,队列首先设置元素1节点的next节点为元素2节点,然后更新tail节点指向元素2节点3、添加元素3,设置tail节...原创 2018-09-12 21:52:39 · 147 阅读 · 0 评论 -
CyclicBarrier 1.8 解析
前置基础,强烈建议先阅读AbstractQueuedSynchronizer解析、condition实现解析CyclicBarrier的描述:“让一组线程到达一个屏障时被阻塞,直到所有的线程都到达屏障时,屏障才会打开,所有被屏障拦截的线程才继续执行”, 而且这个屏障是可以反复利用,所以CyclicBarrier被称为循环栅栏、循环屏障等先看个小例子:士兵集合执行任务public class ...原创 2018-11-11 12:36:44 · 178 阅读 · 0 评论