并发编程脑图
2023-02-17 21:17:01 0 举报
AI智能生成
并发编程脑图
作者其他创作
大纲/内容
内存模型
原子操作
线程池
synchronized
并发基础
AQS
AbstractQueuedSynchronizer同步器
队列同步器
以下3个方法修改 同步状态
getState() 获取当前同步状态
setState(int newState) 设置当前同步状态
compareAndSetState(int expect,int update) 使用cas设置当前状态,能保证状态设置的原子性
同步器可重写的方法基本分为3类
独占式 获取与释放 同步状态
共享式 获取与释放 不通状态
查询同步队列中的等待线程情况
独占锁
同一时刻只能有一个线程获取到锁,而其它获取锁的线程只能处于同步队列中等待,只有获取锁的线程释放了锁,后继线程才能获取锁
实现方式
同步队列
独占式同步状态获取与释放
共享式同步状态获取与释放
CAS
compate And Swap
缺陷
ABA
ABA解决方案
循环时间长 开销大
只能保证一个共享变量的原子性
线程间通信
volatile和synchronized关键字
等待/通知
使用wait()、notify()、notifyAll()时需要先对调用对象加锁
调用wait()方法后,线程状态有RUNNING状态转变为WAITING,并将当前线程放置到对象的等待队列
notify()或notifyAll()方法调用后,等待线程依旧不会从wait()返回,需要调用notify()或notifyAll()的线程释放锁之后,等待的线程才会有机会从wait()返回
notify()方法将等待队列中的一个等待线程从等待队列移中到同步队列,而notifyAll()方法将等待队列中的所有线程全部移动到同步队列,被移动的线程状态由WAITING变为BLOCKING
从wait()方法返回的前提是获得了调用对象的锁
Thread.join()
ThreadLocal
并发集合
ConcurrentHashMap
什么是hashMap
高并发环境下的HashMap
什么是ConcurrentHashMap
ConcurrentHashMap的数据结构
concurrentHashMap数据结构
ConcurrentHashMap初始化
ConcurrentHashMap允许多个读并发进行?
ConcurrentHashMap的size操作
ConcurrentHashMap get操作
ConcurrentHashMap put操作
ConcurrentLinkedQueue
如何实现一个线程安全的队列?
使用阻塞算法
非阻塞算法
concurrentLinkedQueue
入队
出队
java中的阻塞队列
ArrayBlockingQueue
LinkedBlockingQueue
priorityBlockingQueue
DelayQueue
使用场景
缓存系统的设计
定时任务调度
SynchronousQueue
LinkedTransferQueue
LinkedBlockingDeque
CopyOnWrite
CopyOnWriteArrayList
CopyOnWriteArraySet
CopyOnWrite容器介绍
使用场景
黑白名单
读多写少
优缺点
并发工具类
cyclicBarrier
应用场景
CountDownLatch
一个线程调用countDown方法happen-before,另一个线程调用await()方法
CyclicBarrier和CountDownLatch的区别
Semaphore
使用场景
锁
ReentrantLock
实现重进入
公平锁
锁的获取顺序应该符合请求的绝对时间顺序,也就是FIFO
非公平锁
只要CAS设置同步状态成功,则表示当前程获取了锁
ReentrantReadWriterLock
锁的内存语义
NonfairSync
concurrent包的实现
Lock接口
Condition
Condition的实现
等到队列
等待
通知
LockSupport
线程通信
0 条评论
下一页