![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JUC
文章平均质量分 96
Mistra丶
凡心所向,素履以往,生如逆旅,一苇以航。
展开
-
JUC---AbstractQueuedSynchronizer(AQS)解析(JDK13)
java.util.concurrent包系列文章 JUC—ThreadLocal源码解析(JDK13) JUC—ThreadPoolExecutor线程池源码解析(JDK13) JUC—各种锁(JDK13) JUC—原子类Atomic*.java源码解析(JDK13) JUC—CAS源码解析(JDK13) JUC—ConcurrentHashMap源码解析(JDK13) JUC—CopyOnWr...原创 2020-04-06 23:23:39 · 570 阅读 · 1 评论 -
JUC---多线程下控制并发流程(JDK13)
一、概览 控制并发流程的工具类概览 二、CountDownLatch 倒数计数器,倒数结束之前,一直处在等待状态,直到计时结束,此线程才能继续工作 唯一的构造方法 // 传入倒数计数数量 public CountDownLatch(int count) { if (count < 0) throw new IllegalArgumentException("count <...原创 2020-04-06 17:49:19 · 427 阅读 · 0 评论 -
JUC---并发队列源码解析(JDK13)
一、并发队列 先看全家福 并发队列又分为阻塞队列与非阻塞队列 实现了BlockingQueue的就是阻塞队列,最下层左边5个。队列满的时候放不进去,队列空的时候null都取不出来,会阻塞。 最右边2个就是非阻塞队列。 以* Deque结尾的是双端队列,头和尾都能添加和删除。双进双出。一般使用*Queue结尾的。Queue只能一段进一端出。 二、阻塞并发队列 通常,应用于生产者消费者模型。阻...原创 2020-04-06 15:51:01 · 378 阅读 · 0 评论 -
JUC---CopyOnWriteArrayList源码解析(JDK13)
一、CopyOnWrite*系列 CopyOnWriteArrayList和CopyOnWriteArraySet也是常用的并发集合类。他们支持并发的读写。线程安全的。不过有它的缺点。 本篇就分析下CopyOnWriteArrayList的原理和源码。CopyOnWriteArraySet也是类似的。 二 、CopyOnWriteArrayList CopyOnWriteArrayLis...原创 2020-04-06 13:32:22 · 360 阅读 · 0 评论 -
JUC---ConcurrentHashMap源码解析(JDK13)
一、Map家族 本篇只分析ConcurrentHashMap的源码。HashMap就简略带过,但是必须先明白了HashMap的相关原理再来了解ConcurrentHashMap更好。 Map是我们工作中用到最多的数据结构,key-value形式。看看整个Map家族 HashMap,根据键值的hashcode寻找存储位置,查询的时候速度也非常快。线程非安全的。 HashTable,在HashMa...原创 2020-04-06 11:46:04 · 341 阅读 · 0 评论 -
JUC---CAS源码解析(JDK13)
本篇介绍什么是CAS。 一、什么是CAS? 我认为某一个变量在内存的值是A,如果是的话,我就把它设置为B。如果不是的话,就不修改了。典型的乐观锁思想。避免多人同时修改出错。 CAS方法有3个参数,内存值V,预期值A,要修改为的值B。仅当V=A时,才将内存值修改为B。否则什么都不做。最后返回现在的V。 compareAndSet,compareAndSweap等等。比较并设置,比较并交换。等等操...原创 2020-04-05 19:56:36 · 344 阅读 · 0 评论 -
JUC---原子类Atomic*.java源码解析(JDK13)
一、什么是原子类 不可分割性 一个操作是不可中断的,在多线程下也可以保证 相比于锁,原子变量可以把竞争资源缩小到变量级别,粒度更细。 通常情况下比锁的效率更高,但是在高度竞争的情况下性能更低。 以AtomicInteger为例,看看它的方法 int get();//获取到当前值 int getAndSet(int newValue) {//获取到当前值并设置新的值 return U.g...原创 2020-04-05 19:13:15 · 373 阅读 · 0 评论 -
JUC---各种锁(JDK13)
本篇偏概念性,附带部分源码。 常用的锁 常用的2种加锁方式synchronized和Lock。 synchronized的缺点 效率低,试图获得锁时不能设定超时,不能中断一个正在试图获得锁的线程 不够灵活,加锁和释放的时机单一,每个锁仅有单一的条件(某个对象) 无法知道是否成功获取到锁 Lock作为synchronized的一种补充,他们都是可重入锁。 Lock的主要方法 lock():获取...原创 2020-04-05 17:26:45 · 398 阅读 · 0 评论 -
JUC---ThreadPoolExecutor线程池源码解析(JDK13)
线程池的组成 线程池管理器 -> thread-pool 工作线程(线程池中在运行的线程)-> t0,t1,t2…t9 任务队列-> blocking-queue 任务接口(task)-> 队列中的task1,task2… Executor 顶层接口,只有一个 execute方法 void execute(Runnable command); Executo...原创 2020-04-01 23:18:35 · 337 阅读 · 0 评论 -
JUC---ThreadLocal源码解析(JDK13)
ThreadLocal -> 线程本地变量 强调同一个请求内(同一个线程内)不同方法间的共享 让某个需要用到的对象在线程间隔离(每个线程都有自己独有自己独立的对象) ThreadLocal的优点 达到线程安全 不需要加锁 提高执行效率 高效利用内存 节省开销 避免传参的麻烦 Thread、ThreadLocal、ThreadLocalMap三者的关系 每个Thread对象中都持有一...原创 2020-03-30 23:08:04 · 272 阅读 · 0 评论