java并发编程
2021-08-29 14:18:34 22 举报
AI智能生成
登录查看完整内容
为你推荐
查看更多
并发编程的知识图谱
作者其他创作
大纲/内容
线程计数
内部类Sync实现AQS同步器
CountDownLatch
计数器可以reset
getNumberWaiting
isBroken是否被中断
基于ReentrantLock+Condition
CyclicBarrier
Semaphore
Exchanger
并发工具类
compare and swap
基于冲突检测的乐观锁
内存位置
预期原值
新值
操作数
线程自旋
AtomicStampedReference解决
ABA
代码块原子性
CPU利用率
带来的问题
CAS
volatile+CAS 来保证原子操作
AtomicInterger
AtomicBoolean
AtomicLong
atomic
Future获取异步任务的结果
Future
本地线程副本变量工具类
各个线程互不干扰
高并发场景下实现无状态调用
空间换时间概念
ThreadLocal
原要么全部执行,要么就全部都不执行
原子性
可见性指多个线程操作一个共享变量时,线程可以立即看到修改的结果
可见性
有序性,即程序的执行顺序按照代码的先后顺序来执行
有序性
要素
控制线程同步
一段代码、方法、变量加锁
关键字
加锁操作的对象头中的markword
悲观锁,抢占式,引起其他线程阻塞
synchronized
可以获取锁的等待时间,避免死锁
获取各种锁的信息
灵活实现多路通知
底层调用Unsafe的park方法加锁
ReenTrantLock
实现公平锁
等待锁的时候响应中断
可以尝试获取锁
不同范围、不同顺序获取和释放锁
优点
Lock
并发操作线程乐观,比较和替换操作放在修改内存变量中
乐观锁
操作资源时候持有独占锁
悲观锁
锁
多核CPU
防止阻塞
建模、任务拆解
为什么要使用多线程
重写方法是run
实现Runbale接口
Future对象获取异步计算结果
实现Callable接口
继承Thread类
实现方式
新建
start方法后,进入就绪状态
就绪
调度到线程开始运行
运行
等待阻塞,wait
同步阻塞,synchronized 同步锁获取失败
阻塞
死亡
状态
newCacheThreadPool:可缓存线程池
newFixedThreadPool:定长线程池,控制线程最大并发数量
newScheduledThreadPool:定长线程池,支持定时执行任务
newSingleThreadExecutor:单例线程池
线程池
重复使用,减少开销
有效控制并发,提高使用率
提供定时执行、定期执行、单线程、并发控制
线程池的优点
创建线程
ReentrantLock
独占式
共享式
读写分离,读是共享,写是独占
ReentrantReadWriteLock
组合
AQS:AbstractQueuedSynchronizer
Vertor
散列链表+红黑树
利用volatile+CAS实现
内部类TreeBin
ConcurrentHashMap
跳表,按照key自然排序
ConcurrentSkipListMap
数组
volatile+ReentrantLock
利用写时复制实现线程安全
CopyOnWriteArrayList
链表
利用volatile+CAS
ConCurrentLinkedQueue
并发集合
JAVA并发编程
0 条评论
回复 删除
下一页