![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
文章平均质量分 56
加瓦攻城狮
这个作者很懒,什么都没留下…
展开
-
【多线程】AQS原理源码分析--以ReentrantLock中的实现为例
一.概念AQS:AbstractQueuedSynchronizer 翻译过来就是抽象队列同步器.是JUC包下的一个重要的抽象类.用于实现依赖于先进先出(FIFO)等待队列的阻塞锁和相关的同步器(信号量,事件等)二.原理以ReentrantLock中的实现为例1.ReentrantLock调用它的lock()方法时,会调用其内部类Sync的lock()方法,进而又调用了其子类NonfairSync的lock()方法,进而会调用acquire(1)方法2.这个acquire(1)方法最终会调用到AQ原创 2021-06-29 21:59:46 · 111 阅读 · 0 评论 -
使用线程池等待所有任务执行完成后进行其它操作(异步转同步)
需求背景:之前项目组有个需求,大致就是:1.上传一组图片到云后得到所有的url2.拿到所有的进行一系列业务操作3.下载所有之前上传的图片分析:1.上传图片(IO)可以使用多线程执行,提高效率2.需要拿到所有图片上传的结果(url)后才能进行下一步操作解决思路:需要异步转同步操作使用CountDownLatchpublic static void main(String[] args) throws Exception { List<String> pho原创 2021-05-09 00:34:58 · 799 阅读 · 1 评论 -
JUC--固定容量同步容器实现
JUC–固定容量同步容器实现问题:写一个固定容量同步容器,拥有put和get方法,以及getCount方法,能够支持2个生产者线程以及10个消费者线程的阻塞调用代码import java.util.LinkedList;import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.c原创 2021-01-31 18:14:16 · 134 阅读 · 1 评论 -
CAS,ReentrantLock和synchronized总结
概念CAS (compareAndSet(最新) 或compareAndSwap JDK不同版本名称不同)当且仅当原值==期望值时,才更新为新值具体表现为:当一个线程需要修改某个值时,会将原值(即当前线程中该值的副本)跟主内存中的这个值进行比较,如果相等,就更新为新值.例如 count++; 当前线程中count=2(原值); 主内存中的count=2(即期望值);此时count 就执行++操作,更新为count=3(新值)如果此时当前线程中count=2(原值); 主内存中的count=3(即原创 2021-01-31 21:23:23 · 512 阅读 · 4 评论 -
volatile的作用及应用和不适用场景
volatile的作用1.保证线程可见性本质上是使用了CPU 的缓存一致性协议 在inter CPU下使用的是 MESI 协议2.禁止指令重排序public class User { private String name; private Integer age; public String getName() { return name; } public void setName(String name) { this.name原创 2021-01-31 19:35:05 · 674 阅读 · 11 评论