多线程
文章平均质量分 86
凿壁偷光丶
这个作者很懒,什么都没留下…
展开
-
ReentrantReadWriteLock 源码解析
ReentrantReadWriteLock源码解析1. 结构ReentrantReadWriteLock可重入的读写锁,顾名思义就是该重入锁中存在多种锁,1、重入锁;2、读锁;3、写锁;读锁、写锁中都存在着一个Sync同步器,该同步器又是重入锁的sync下面是读写锁的基本结构很清楚了,ReadLock 和 WriteLock 中的方法都是通过 Sync 这个类来实现的。Sync 是 AQS 的子类,然后再派生了公平模式和不公平模式。2. 基础信息static final int SHARE原创 2021-12-21 12:57:19 · 573 阅读 · 0 评论 -
AQS (队列同步器)源码解析
AbstractQueuedSynchronizer (队列同步器)源码解析结构AbstractQueuedSynchronizer 是一个抽象的同步器,内部结构使用了双向链表(同步队列) + 单链表 (条件队列),在一般的情况下都只会使用同步队列,设计到阻塞队列 BlockQueue 时,会使用到条件队列,所以说 AbstractQueuedSynchronizer 是一个强大的抽象类,涵盖了并发时涉及到的各个方面。下面只会涉及到同步队列的使用原创 2021-07-03 18:19:04 · 263 阅读 · 0 评论 -
Synchronized 分析
Synchronized 关键字锁分类锁分为乐观锁、悲观锁。乐观锁的意义是认为读多写少,遇到并发的可能性低,每次去获取数据都认为没有其他线程去修改,所以不会上锁,只是再更新的时候判断在此期间是否有其他线程去修改了数据,一般采用的是先读出当前版本号,然后利用CAS去更新数据。悲观锁则是认为写多读少,遇到并发的可能性高,每次去读写数据时,都会上锁。使得锁持有的时候,其他线程想要操作会被阻塞。而Synchronized则是悲观锁的具体实现。Synchronized 持有锁其实是获取对象的.原创 2021-04-15 13:02:41 · 82 阅读 · 0 评论 -
线程池原理源码分析
线程池原理分析线程池好处 创建/销毁线程需要消耗系统资源,线程池可以复用已创建的线程 控制并发的数量,并发数量过多,可能会导致资源消耗过多,从而造成服务器崩溃。(主要原因) 可以对线程做统一管理 线程池原理线程池结构从图中可以看出,ThreadPoolExecutor 继承了 AbstractExecutorService 类, AbstractExecutorService 实现了 ExecutorService 接口,ExecutorService 接口继承原创 2021-04-11 13:25:30 · 104 阅读 · 0 评论 -
多线程并发通信工具类
多线程并发通信工具类Semaphore定义限制线程的数量,往往用于资源有限的场景中,限制线程的数量。// 默认情况是使用非公平public Semaphore(int permits) { sync = new NonfairSync(permits);}public Semaphore(int permits, boolean fair) { sync = fair ? new FairSync(permits) : new NonfairSync(permi...原创 2021-04-10 23:47:56 · 141 阅读 · 0 评论 -
BlockingQueue - 阻塞队列
# BlockingQueue - 阻塞队列## 定义BlockingQueue 一般用于生产者-消费者模式,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。BlockingQueue 就是存放元素的容器。### 1. 常用方法![image-20210410144110488](https://gitee.com/rule-liu/pic/raw/master/img/20210410144116.png)- 抛出异常:如果操作无法立即执行,则会抛出异常。当阻塞队列满的时原创 2021-04-10 23:42:48 · 1379 阅读 · 10 评论