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