JUC源码分析
chenchangqun11
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
JUC源码分析-容器-ConcurrentHashMap
概述 HashMap是线程不安全的map, ConcurrentHashMap 是线程安全的map,并能适应高并发的场景。 核心属性和数据结构 final int segmentMask; final int segmentShift; key生成的hash值 位移segmentShift 并与上segmentMask 就是 这个key的Segment在segments数组中的索引位置。...原创 2020-03-16 18:33:35 · 229 阅读 · 0 评论 -
JUC源码分析-容器-ConcurrentSkipListMap和ConcurrentSkipListSet
概述 ConcurrentSkipListMap:线程安全的有序Map,TreeMap是线程不安全的有序Map. 数据使用表单项链表存储,它借助一种跳表(Skip Lisy)的数据结构,可简单理解为 附加的索引,后面有详细分析。 ConcurrentSkipListSet:借助ConcurrentSkipListMap 实现的线程安全的有序Set,它们俩的关系就像 TreeMap 和TreeS...原创 2020-03-16 12:09:53 · 382 阅读 · 0 评论 -
JUC源码分析-辅助类-Phaser
概述 Phaser 是一个同步辅助类,与CyclicBarrier和CountDownLatch功能相似,用于栅栏条件的相互等待,支持更丰富的用法, 可以将一个的程序的等待分为多个阶段。 主状态分为 4部分,1~15位 未到达者数,16~31位参与数 parties,32~62 阶段值 phase 63位 结束标识, 64位正负标识 private volatile long state; ...原创 2020-03-03 10:50:58 · 255 阅读 · 0 评论 -
JUC源码分析-辅助类-CountDownLatch,Semaphore,CyclicBarrier,Exchanger
本文分析并发辅助类 CountDownLatch,Semaphore,CyclicBarrier,Exchanger CountDownLatch 同步辅助类 实现一个线程 等待其他1~N个线程执行完成,再继续执行其他代码。 构造方法 跟踪构造方法 依赖一个 内部类,这个内部类Sync 继承了AbstractQueuedSynchronizer public CountDownLatch...原创 2020-03-02 16:39:42 · 223 阅读 · 0 评论 -
JUC源码分析-ScheduledThreadPoolExecutor
概述 ScheduledThreadPoolExecutor 预定任务线程池,用于执行延迟和周期性任务。 核心属性和数据结构 //是否应该废弃周期任务 当关闭时 private volatile boolean continueExistingPeriodicTasksAfterShutdown; //是否应该取消非周期任务 当关闭时 private volatile bo...原创 2020-02-25 15:13:48 · 239 阅读 · 0 评论 -
JUC源码分析-容器-PriorityBlockingQueue
概述 PriorityBlockingQueue:二叉堆结构优先级阻塞队列,FIFO,通过显式的lock锁保证线程安全,是一个线程安全的BlockingQueue,加入队列的数据实例按照指定优先级升序排列,这个规则通过赋值 实现了Comparator的字段或数据实例类实现Comparable接口自定义,都定义的情况下 字段比较器优先。它一个老牌的队列,在JDK1.5已经加入,如果队列加入的数据实...原创 2020-02-25 15:00:41 · 206 阅读 · 0 评论 -
JUC源码分析-读写锁-ReentrantReadWriteLock
概述 ReentrantReadWriteLock 有2个锁,读锁和写锁。读读不加锁,读写,写读,写写都加锁。 读锁是共享锁,写锁是排他锁。 读锁和写锁的状态值被保存在int的值中,前16位表示 共享读锁状态值,后16位表示排他写锁状态值。 数据结构和核心参数 分析一下有关的属性 static final int SHARED_SHIFT = 16;//共享锁占据16位 static ...原创 2020-02-25 14:47:41 · 267 阅读 · 0 评论 -
JUC源码分析-ThreadPool-jdk7
ThreadPool源码分析-jdk7 jdk7 并发包中的线程代码被重写。 线程池中原来代表线程数的poolSize 和代表状态的state被合并到ctl中 int类型共有32位,ctl的高三位用来表示状态,剩下的28位用来表示工作线程数 private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0))...原创 2020-01-23 12:05:05 · 218 阅读 · 0 评论 -
JUC源码分析-ThreadPool-jdk6
ThreadPool源码分析-jdk6 execute方法分析 public void execute(Runnable command) { if (command == null) throw new NullPointerException(); //poolSize初始值为0,先启动corePoolSize数量的线程执行 if (poolSize >= corePoolS...原创 2020-01-23 12:00:53 · 255 阅读 · 0 评论 -
JUC源码分析-容器-SynchronousQueue
SynchronousQueue 无界队列, TransferStack从head 前面插入节点,TransferQueue从tail后写入节点 公平和非公平只是 FIFO 和LIFO的区别? 源码中实现了一种队列结构的算法 队列中有两个角色 传递者和接受者, 传递者之间排队,接受者之间排队,默认第一个入队的节点是接受者,后面入队的节点的模式与这个节点相同的为接受者,不同的为传...原创 2020-03-07 19:08:42 · 234 阅读 · 0 评论 -
JUC源码分析-容器-ConcurrentLinkedQueue
ConcurrentLinkedQueue 是单向链表结构的无界并发队列。从JDK1.7开始加入到J.U.C的行列中。使用CAS实现并发安全,元素操作按照 FIFO (first-in-first-out 先入先出) 的顺序。适合“单生产,多消费”的场景。 内存一致性遵循对ConcurrentLinkedQueue的插入操作先行发生于(happen-before)访问或移除操作。、?? ...原创 2020-03-11 20:40:28 · 265 阅读 · 0 评论 -
JUC源码分析-容器-LinkedBlockingQueue和ArrayBlockingQueue
BlockingQueue 先进先出,出队列即移除。可用来实现消费者模式 BlockingQueue的核心方法: 放入数据: offer(anObject):表示如果可能的话,将anObject加到BlockingQueue里,即如果BlockingQueue可以容纳,则返回true,否则返回false.(本方法不阻塞当前执行方法的线程) offer(E o, long t...原创 2020-01-23 11:32:51 · 248 阅读 · 0 评论 -
JUC源码分析-容器-List和set
CopyOnWriteArrayList 写加锁 ,读不加锁。 CopyOnWrite 读写分离的思想, 修改的时候copy出一个副本,读还是使用原内存,修改期间不影响读,当修改完成,副本替换原来的内存。 适用于读多写少的场景。 聊聊并发-Java中的Copy-On-Write容器:http://ifeve.com/java-copy-on-write/ 适用场景:白名单,黑名单,商品类...原创 2020-01-23 11:00:34 · 181 阅读 · 0 评论 -
JUC源码分析-容器-简介
list和set CopyOnWriteArrayList:相当于线程安全的ArrayList,通过显式锁 ReentrantLock 实现线程安全。允许存储null值。 CopyOnWriteArraySet:相当于线程安全的HashSet,内部使用 CopyOnWriteArrayList 实现。允许存储null值。 Map ConcurrentHashMap:线程安全的HashMap...原创 2020-01-23 10:57:53 · 348 阅读 · 0 评论 -
JUC源码分析-FutureTask,CompletionService
FutureTask 的几个关联方法 <T> Future<T> submit(Callable<T> task); <T> Future<T> submit(Runnable task, T result); <T> Future<T> submit(Runnable task); void execu...原创 2020-01-22 18:53:24 · 272 阅读 · 0 评论 -
JUC源码分析-Reetrantlock-Condition
Condition是Reerantlock 实现了 wait- notify 模式的类 synchronized锁 wait- notify 模式 实现的 是 Object.wait(),Object.notify()。 so 重入锁 Reerantlock 也要有wait- notify 模式 的实现,他就是 Condition Condition在ArrayBlockingQueue和 ...原创 2020-03-01 15:38:35 · 261 阅读 · 0 评论 -
JUC源码分析-AQS
AbstractQueuedSynchronizer分析 AQS独占锁方法分析 互斥模式也可以称为独占模式,独占锁是互斥模式的实现(互斥模式的代码 在公平锁和非公平锁有讲解,这里不再详述) //互斥模式获取锁的模板方法, tryAcquire 尝试通过CAS方式获取锁,由子类实现。 public final void acquire(int arg) { if (!tryAcquire(...原创 2020-01-09 18:17:36 · 216 阅读 · 0 评论 -
JUC源码分析-重入锁-Reetrantlock
非公平锁和公平锁 NonfairSync-lock final void lock() { //第一次尝试获取锁 if (compareAndSetState(0, 1)) setExclusiveOwnerThread(Thread.currentThread()); else acquire(1); } AbstractQueuedSynchronizer-addWaiter...原创 2020-01-09 18:01:36 · 224 阅读 · 0 评论
分享