
JUC
文章平均质量分 68
JUC常用组件源码解析
shstart7
长春大学 19级
展开
-
Java高并发之AQS系列源码解析合集
AQS源码解析合集原创 2021-12-08 10:20:43 · 370 阅读 · 0 评论 -
Java手写实现简单线程池
手写简易线程池原创 2022-04-28 12:12:00 · 580 阅读 · 0 评论 -
高并发计数器之LongAdder源码解析
LongAdder源码解析原创 2021-11-23 18:14:00 · 855 阅读 · 0 评论 -
ThreadLocal源码解析1.运行原理
ThreadLocal源码解析原创 2021-12-08 19:42:28 · 471 阅读 · 0 评论 -
ThreadLocal源码解析2.ThreadLocalMap
ThreadLocalMap原创 2021-12-09 21:50:17 · 562 阅读 · 0 评论 -
《Java并发编程的艺术》1.Java并发机制的底层实现原理
并发机制的底层实现原理原创 2021-11-15 09:32:39 · 486 阅读 · 0 评论 -
《Java并发编程的艺术》2. Java内存模型大总结
Java内存模型最全详解,包括happends-before, as-if-serial等内存语义原创 2021-11-16 12:59:58 · 462 阅读 · 0 评论 -
线程池源码解析1.FutureTask源码解析
FutureTask源码解析原创 2021-11-27 21:47:03 · 763 阅读 · 0 评论 -
线程池源码解析2.工作原理与内部结构
线程池源码解析-工作原理与内部结构原创 2021-11-28 15:57:16 · 234 阅读 · 0 评论 -
线程池源码解析3.execute()方法
1.execute()方法1.1大致流程这里只是总结了一遍大致的流程,一些细节问题见下面的流程图或者参考源码。当提交任务时,首先判断当前线程池内的线程数是否达到了核心线程,没有达到核心线程数就开线程去执行任务,如果达到了核心线程数,就尝试将任务加入阻塞队列中。如果说队列也满了,就尝试继续开线程执行任务,如果此时线程池中的存活线程已经等于了maximumPoolSize,那么直接走拒绝策略。没有到达最大线程,则开启线程执行任务。1.2流程图1.3源码解析 /* * comm原创 2021-11-28 21:30:07 · 3205 阅读 · 0 评论 -
线程池源码解析4.runWorker()
worker总流程图1.runWorker()大体流程:先会执行当前的worker内部的任务,执行任务时需要加锁 (worker内部的锁),如果执行内部任务成功时会尝试去队列中拿任务继续执行(可能会被阻塞)。当执行任务失败时会将当前的worker从workers集合中删除。 // worker 就是创建的worker(Runnable) final void runWorker(Worker w) { //就是worker内部的Thread属性 Threa原创 2021-11-29 17:43:18 · 3681 阅读 · 0 评论 -
线程池源码解析5.shutdown/Now()方法
1.shutdownshutdown就是将线程池状态设置为SHUTDOWN,然后中断所有空闲(空闲即阻塞在队列上)的线程,最终设置线程池状态为Terminated。 public void shutdown() { final ReentrantLock mainLock = this.mainLock; //加锁(全局锁) mainLock.lock(); try { checkShutdownAccess(原创 2021-11-29 17:44:22 · 4067 阅读 · 0 评论 -
AQS共享模式之Semaphore源码解析
AQS共享模式之Semaphore原创 2021-12-08 09:56:07 · 421 阅读 · 0 评论 -
AQS共享模式之CyclicBarrier源码解析
循环屏障CyclicBarrier源码解析原创 2021-12-07 16:26:55 · 395 阅读 · 0 评论 -
AQS共享模式之CountDownLatch源码解析
AQS共享模式之CountDownLatch原创 2021-12-06 19:42:11 · 464 阅读 · 0 评论 -
Condition条件队列源码解析2.await()与signal()解析
Condition等待队列原创 2021-12-06 09:32:11 · 950 阅读 · 3 评论 -
AQS源码解析3.release()方法
AQS.release()方法解析原创 2021-12-03 13:32:54 · 515 阅读 · 0 评论 -
AQS源码解析2.内部核心结构与lock过程
AQS内部核心结构与lock过程原创 2021-12-02 20:07:02 · 335 阅读 · 0 评论 -
AQS源码解析1.前导_手写一个简单的ReentrantLock
实现简单的ReentrantLock原创 2021-12-01 20:14:43 · 2903 阅读 · 0 评论 -
ConcurrentHashMap源码解析1.内部结构
ConcurrentHashMap源码解析系列之分析内部结构原创 2021-11-24 13:08:41 · 843 阅读 · 0 评论 -
ConcurrentHashMap源码解析2.内部简单方法
ConcurrentHashMap源码解析原创 2021-11-24 15:27:13 · 982 阅读 · 0 评论 -
ConcurrentHashMap源码解析3.put()方法
1.putVal()方法写数据大体流程写前操作1、ConcurrentHashMap 不允许key或value为NULL,会抛出异常2、写数据前,会先对key的hash值进行一次加工spread()写数据流程整个写数据是一个 自旋(死循环) 的操作。情况一: 当前的table还没有被初始化。调用initTable()去尝试初始化table,然后继续自旋.情况二: 当前table已经被初始化,调用寻址算法(hash & (table.length - 1))得到的桶位上的元素为N原创 2021-11-25 21:18:38 · 1173 阅读 · 0 评论 -
ConcurrentHashMap源码解析4.transfer()方法(核心)
ConcurrentHashMap核心方法之transfer()方法。原创 2021-11-25 21:49:16 · 1134 阅读 · 0 评论 -
ConcurrentHashMap源码解析5.get()&remove()方法
get()方法流程总结1.计算key的hash值寻址到指定桶位2.当前桶位没有元素直接返回NULL。3.当前桶位如果是fwd节点或者是红黑树节点,则调用各自的find()方法。4.当前桶位不是fwd节点也不是红黑树节点,则遍历桶位,进行查找。5.查找元素没有任何的加锁操作。源码解析 /* * 根据key进行查找获取value值 */ public V get(Object key) { /*原创 2021-11-26 13:17:49 · 585 阅读 · 0 评论 -
ConcurrentHashMap源码解析6.TreeBin类
1.回顾我们知道,当一个桶位形成了红黑树时,此时桶位中存的是一个TreeBin节点,其内部存在两个引用,分别是指向双向链表的first和指向红黑树根节点的r。2.属性 /* * TreeBin继承了Node。其也有hash值(为-2) */ static final class TreeBin<K,V> extends Node<K,V> { //红黑树根节点 TreeNode<K,原创 2021-11-26 20:58:24 · 1106 阅读 · 0 评论 -
《Java并发编程的艺术》3.Java并发编程基础
Java并发编程基础1.1线程简介线程作为操作系统调度的最小单元。现代操作系统在运行一个程序时,为其创建一个进程,例如,启动一个Java程序,操作系统就会创建一个Java进程。现代操作系统调度的最小单元是线程,也叫轻量级进程(Light Weight Process),在一个进程里可以创建多个线程,这些线程都拥有各自的计数器、堆栈和局部变量等属性,并且能够访问共享的内存变量。处理器在这些线程上高速切换,让使用者感觉到这些线程在同时运行。线程优先级现代操作系统基本采用时分的形式调度运行的线程,操原创 2021-11-18 13:53:07 · 1105 阅读 · 0 评论 -
《Java并发编程的艺术》4.AQS上
》》AQS参考路飞大佬AQS1.1概述队列同步器AbstactQueuedSynchronizer(以下简称同步器,是一个抽象类),是用来构建锁或者其他同步组件的基础框架,它使用了一个volatile修饰的int成员变量表示同步状态(volatile int state),通过内置的FIFO队列来通过CAS完成资源获取线程的排队工作。 并发包的作者Doug lea期望它能够成为大部分同步需求的基础。同步器的主要使用方式是继承,子类通过继承同步器并实现它的抽象方法来管理同步状态,在抽象方法的实现过程原创 2021-11-18 10:53:56 · 480 阅读 · 0 评论 -
《Java并发编程的艺术》4.AQS下
1、重入锁1.1概述重入锁ReentrantLock,顾名思义,就是支持重进入的锁,它表示该锁支持一个线程对资源的重复加锁。除此之外,该锁还支持获取锁时的公平和非公平性选择。synchronized关键字隐式的支持重进入,比如一个synchronized修饰的递归方法,在方法执行时,执行线程在获取了锁之后仍能连续多次地获取该锁。ReentrantLock虽然没能像synchronized关键字一样支持隐式的重入,但是在调用lock()方法时,已经获取到锁的线程,能够再次调用lock()方法而不被阻塞原创 2021-11-19 18:37:50 · 441 阅读 · 0 评论 -
Condition条件队列源码解析1.实现简单阻塞队列
Condition条件队列实现一个简单阻塞队列当队列中元素满了就阻塞生产者线程,当队列为空就阻塞消费者线程。这里用的是Lock + await() + singal() / signalAll()也可以使用synchronized + wait() + notify()/ notifyAll()import java.util.LinkedList;import java.util.concurrent.locks.Condition;import java.util.concurrent.l原创 2021-11-17 16:21:26 · 368 阅读 · 0 评论 -
Java并发之JUC下
JUC下原创 2021-05-22 17:05:22 · 180 阅读 · 0 评论 -
Java多线程详解
Java多线程详解原创 2021-05-22 17:08:13 · 319 阅读 · 0 评论 -
Java并发之JUC上
JUC上原创 2021-05-22 17:03:07 · 240 阅读 · 0 评论