JUC
文章平均质量分 80
深入解析JUC系列文章,深 透 明 细
willorn
希望这些文字能够帮助到大家,谢谢大家的支持
展开
-
【JUC】多线程基础
线程状态运行状态:新生 NEW就绪运行 RUNNABLE死亡 阻塞TERMINATED 终止 == 死亡package com.company.demo.test;public class Demo10_state { public static void main(String[] args) {// 里面写的是run方法,使得线程能维持一段时间 Thread thread = new Thread(() -> {原创 2021-05-10 09:58:41 · 179 阅读 · 0 评论 -
【源码解析】ReentrantLock的重入锁分析AQS
ReentrantLockSynchronizedReentrantLock锁实现机制对象头监视器模式依赖 AQS灵活性不灵活支持响应中断、超时、尝试获取锁释放锁形式自动释放锁显示调用 unlock()支持锁类型非公平锁公平锁 & 非公平锁条件队列单条件队列多个条件队列是否支持可重入支持支持AQS:state:volatile 、CASAQS中的队列1、先进先出的双端队列2、通过 Head、Tail 头尾原创 2021-10-03 12:26:34 · 241 阅读 · 0 评论 -
【玩转线程池】ThreadPoolExecutor总结
线程池 ThreadPoolExecutor是什么:worker们的血汗工厂有什么用:减少资源消耗,方便管理线程怎么玩:自己new线程池玩线程池原理线程池工作原理(优点,缺点)没有线程池的时候,与有线程池的时候进行对比。解决了资源分配问题,池化思想,最大化收益最小化风险,统一资源进行管理的方式。线程池5个状态(run、shutdown、Stop、dying、terminated)线程池状态转换(shutdown、shutdownNow、workerQueue的变化)7个参数(core、原创 2021-10-02 09:30:48 · 290 阅读 · 0 评论 -
【JUC】线程池_参数_ForkJoin_CompletableFuture
线程池类比为银行业务员,1、降低消耗,不用经常请人,hr也很幸苦的2、控制最大能有多少个业务员 MaxThreadPoolSize3、员工好管理,统一编制统一管理线程池:第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的销耗。第二:提高响应速度。当任务到达时,任务可以不需要等待线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会销耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。几个特殊的池Executors原创 2021-09-21 13:34:31 · 300 阅读 · 0 评论 -
【JUC】线程消息 sync JUC工具类
技术:深,透,明,细生产者消费者模型:1、高内聚低耦合,线程操作资源类2、判断干活通知3、判断使用while,出来以后还是重新判断。(防止多线程的虚假唤醒)这个生产者消费者demo挺好玩的class ProDuc{ int num = 0; public synchronized void increment() throws InterruptedException { // 1. num现在为 1:那么进入{},当前线程 wait等待唤醒 .原创 2021-09-20 22:27:29 · 265 阅读 · 1 评论 -
CAS原理浅析——自旋锁ABA情况的解决
马老师的分析:CAS锁 == 自旋锁:一直不断更新,直到没有人进来就更新成功,一直循环,成功为止。ABA问题:080,看着一样,但是其实不一样了(女朋友例子)1 )加版本,versionControl,给别人1回来变成9992 )boolean = markable保障CAS操作原子性问题:(lock指令),CAS模拟实现:val加到1000模拟操作提高并发性能:降低锁的粒度,只对val进行加锁public class ModelTest { volatile private s原创 2021-09-07 14:15:52 · 752 阅读 · 0 评论 -
【源码解析】关于List、Map、Set浅析
collection接口:ArrayListsize为实时元素个数初始化的几种情况:1、指定容量,直接初始化2、指定容量为0,指向空数组“elementData”3、不指定容量,延迟初始化add进入先判断数组是否为空,为空情况下判断初始容量为DEFAULT_CAPACITY = 10;还是minCapacity(size + 1)得到minCapacity再去确定准确的容量,如果需求的最小容量也比现在的数组长度(elementData.length)大,那么执行grow方法。gro原创 2021-09-18 09:11:49 · 200 阅读 · 0 评论 -
【源码解析】深入理解HashMap
静态区域六参数:static final6参数,初始化的大小以及最终的限定范围,其余六个和树化有关,一个是相关的参数,其余的是判定是否能够树化以及树的退化的条件// 初始化HashMap的时候,如果没有赋值,那么我们会给它赋上默认的缺省值为16//数组一开始的大小默认就为16,即HashMap中桶的数量 2^4 【凡涉及到"容量"一词,都是指桶的数量】static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16原创 2021-09-03 12:19:15 · 239 阅读 · 0 评论 -
【源码解析】ConcurrentHashMap
废话不多说,show me your code构造方法:get方法:关于find方法,自己在思考的时候遇到了一些错误,get的时候怎么确定会进入到哪个方法?put的时候已经确定了是FWD还是TreeBin,在扩容时,当前桶挪完在桶位上放置FWD节点,其他线程定位到这个桶位,会调用FWD的find方法。非扩容时,不会调用FWD的find方法。put方法...原创 2021-10-20 11:17:18 · 387 阅读 · 0 评论 -
红黑树解析——从概念到Code
基本概念①、路径:顺着节点的边从一个节点走到另一个节点,所经过的节点的顺序排列就称为“路径”。②、根:树顶端的节点称为根。一棵树只有一个根,如果要把一个节点和边的集合称为树,那么从根到其他任何一个节点都必须有且只有一条路径。A是根节点。root③、父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点,parent④、子节点:一个节点含有的子树的节点称为该节点的子节点;F、G是C节点的子节点。⑤、兄弟节点:具有相同父节点的节点互称为兄弟节点;F、G节点互为兄弟节点。⑥、叶节点:没有子节点原创 2021-09-05 21:49:46 · 378 阅读 · 1 评论