JUC并发包
文章平均质量分 82
北京一夜℃
这个作者很懒,什么都没留下…
展开
-
ConcurrentHashMap源码剖析
ConcurrentHashMap与HashTable类似,都是为了解决并发情况下HashMap的不安全问题,不过ConcurrentHashMap与HashTable比起来效率会更高一些。这里先说明Jdk8之后的ConcurrentHashMap源码。 成员变量 public class ConcurrentHashMap<K,V> extends AbstractMap<K,V> implements ConcurrentMap<K,V>...原创 2021-07-27 13:52:22 · 118 阅读 · 0 评论 -
ReentrantLock可重入锁源码剖析
有了AQS的基础后(AQS(AbstractQueuedSynchronizer)源码初识),可以进一步分析基于AQS独占模式实现的Reentrantlock。 首先来看看成员变量 成员变量 public class ReentrantLock implements Lock, java.io.Serializable { private static final long serialVersionUID = 7373984872572414699L; /** 提供所有实现机制..原创 2021-07-21 10:12:24 · 132 阅读 · 0 评论 -
AQS(AbstractQueuedSynchronizer)源码初识
前几天在对比Synchronized和ReentrantLock的关系和区别时,以及学习使用Semaphore、CountDownLatch和CyclicBarrier时,发现里面底层都有这样一个同步器。这让我觉得学习它们的底层原理,就不得不学习AQS自身的底层原理,那么,我们就来吧。 这里参考了队列同步器(AQS)详解和这才是图文并茂:我写了1万多字,就是为了让你了解AQS是怎么运行的 目录 成员变量 Node 独占式同步组件的设计 同步器提供的模板方法 供子类重写的...原创 2021-07-18 16:14:37 · 151 阅读 · 0 评论 -
基础线程池介绍(基于ThreadPoolExecutor类)
CachedThreadPool 缓存线程池:使用方式 ExecutorService cT= Executors.newCachedThreadPool(); /** 创建一个线程池,根据需要创建新线程,但在可用时将重用先前构造的线程。 这些池通常会提高执行许多短期异步任务的程序的性能。 如果可用,调用execute将重用先前构造的线程。 如果没有可用的现有线程,则会创建一个新线程并将其添加到池中。 60 秒内未使用的线程将被终止并从缓存中删除。 因此,保持空闲足够长时间的池不..原创 2021-07-16 14:23:56 · 171 阅读 · 0 评论 -
Java线程池ThreadPoolExecutor源码解析
它也处于JUC并发包中,是我们并发开发中的名器。 线程池为什么出现?可以说这是一个帮我们管理程序中运行的多个线程,避免多个线程使用时的混乱,减少不必要的线程创建或线程销毁带来的开销。 成员变量 /*Since: 1.5 Author: Doug Lea */ public class ThreadPoolExecutor extends AbstractExecutorService { //int型32位来表示线程的状态(左3位)和线程数量(右29位) priva...原创 2021-07-15 16:41:21 · 147 阅读 · 0 评论 -
CopyOnWriteArrayList源码剖析
这JUC包里最典型的解决ArrayList线程不安全问题的数据结构,读写分离的思想,比Vector和Collections.synchronizedList高效。 目录 成员变量 构造函数 添加 更改操作 查询 删除 成员变量 public class CopyOnWriteArrayList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable { ...原创 2021-07-14 16:04:09 · 76 阅读 · 0 评论