并发控制思维导图
2023-06-15 22:33:30 0 举报
AI智能生成
并发控制思维导图
作者其他创作
大纲/内容
维护一个volatile的state
state控制一个存储Thread的双向链表。向链表里添加thread是通过compareAndsetState
设到了当前线程的map里
set
线程操作自己的副本,不共享
ThreadLocal
AQS是一种提供了原子式管理同步状态、阻塞和唤醒线程功能以及队列模型的简单框架
AQS-AbstractQueuedSynchronizer
使用分段锁
LongAdder
lock.lock()->锁定,lock.unlock()->解锁
lock.lockInterruptibly()->可以对interrupt()方法做出响应,可以被打断加锁
new ReentrantLock(true);->参数为true表示公平锁
可以添加Condition,精确指定哪个线程被唤醒
ReentrantLock-可重入锁
latch.await()-->等待
latch.countDown()
倒数
CountDownLatch-门栓
parties->满xx发车
barrier.await()->等待
复杂操作:1.数据库,2.网络,3.文件并发操作:-线程-操作 线程-操作
CyclicBarrier-循环栅栏
无锁优化,自旋
Actomic都是cas方式
Compare and Set
cup原语支持,不会被打断,保证线程安全
添加版本号
基础类型无所谓
引用类型,对象会变化
ABA问题
可以操作jvm的内存
等同于C c++的指针
通过Unsafe类实现
实现方式CAS
readLock()->其他线程可以继续读
writeLock()
子主题
ReadWriteLock-共享锁,排它锁
强
对象只有一个软引用,只有堆内存不够的时候才会回收
-Xms 20M -Xmx20M堆内存最大,最小
主要用作缓存
软SoftReference
可以被gc立刻回收
有强引用,引用断开,立刻就会回收
用在容器里
对象不再使用,必须remove()不然会引起内存泄露
典型:ThreadLocal
弱WeakReference
应用在jvm
get方法拿不到值
引用断开,会放到队列里,回收对外内存
虚PhantomReference
java的引用类型
Disruptor
实现Runnable接口
run方法执行多线程部分
继承Thread类
实现Callable接口,线程池
创建线程的3种方式
yeild方法,让出一下cpu
sleep,让给别的线程执行
cpu
新建状态,还没有调用start()
new
等待cpu运行
Ready-就绪状态
在cpu中运行
Running-运行状态
Runnable
时间结束
TimeWaiting
Waiting
等待进入同步代码块的锁
Blocked
线程执行结束
Terminated
线程的6种状态
锁对象this
锁方法,锁的是this
静态方法。锁T.class
是可重入锁
程序出现异常,默认清空,锁会被释放
markword上记录线程id
用户态
占用Cpu,但是不占用操作系统
执行时间短,线程数量少,适合自旋锁
如果线程争用 升级为 自旋锁
旋10次之后,拿不到,升级为重量级锁
锁升级
不能用String常量,Integer,Long
synchronized(Object)
MESI
Cpu缓存一致性协议
保证线程可见性
DCL单例Double check Lock
申请内存
初始化对象
为对象赋值
对象创建过程
禁止指令重排序
不能保证原子性
Volatile
线程锁定
wait
线程唤醒
notify
Synchroinzed
遗传算法
phaser.bulkRegister()->注册数量
phaser.arriveAndAwaitAdvance();->到达后等待往下走
重新onAdvanc()->前进
phaser.arriveAndDeregister()
Phaser-多阶段栅栏1.7
permit:int
acquire();获得锁->信号量-1
release();->释放锁,信号量+1
限流
车道和收费站
Semaphore-信号灯
2个线程间交换数据
Exchanger
实现当前线程阻塞和唤醒
park();
unpark();可以先于park()执行
LockSupport
ArrayList
LinkedList
应用:读特别多,写很少
CopyOnWriteArrayList-写时复制
Stack
Vector
线程安全
List
LinkedHashSet
HashSet
TreeSet
SortedSet
ConcurrentSkipListSet
CopyOnWriteArraySet
EnumSet
Set
Connection
ArrayDeque
LinkedBlockingDeque
BlockingDeque
Deque
put
queue中没有,使用take阻塞
take
阻塞
SynchronousQueue
按时间排序的队列
DelayQueue
ProtityBlockingQueue
transfer()
LinkedTransferQueue
TransferQueue
BlockingQueue
ConcurrentLinkedQueue
poll
offer
peek
与List差异:添加了一些线程友好的Api
排序输出
二叉树,小顶堆
ProtityQueue
AstractQueue
Queue
LinkedHashMap
HashMap
TreeMap
IdentityHashMap
ConcurrentHashMap
有序,支持并发
多层链表,加速查询
TreeMap做CAS太复杂,所以产生跳表
ConcurrentSkipListMap
WeakHashMap
Map
容器
并发控制技术
0 条评论
回复 删除
下一页