Java多线程并发编程详解
2021-07-18 22:17:28 0 举报
AI智能生成
Java多线程详解,包含ConcurrentHashMap,原子类,内存模型,信号量等。
作者其他创作
大纲/内容
并发工具类
CyclicBarrier
应用场景
CountDownLatch
一个线程调用countDown方法happen-before,另外一个线程调用await方法。
CyclicBarrier和CountDownLatch的区别
Semaphone
使用场景
锁
ReentrantLock
实现重进入
公平锁
非公平锁
ReentrantReadWriterLock
volatile
volatile实现机制
内存语义
vloatile的特性
volatile写-读的内存语义
volatile内存语义的实现
锁的内存语义
NonfairSync
NonfairSync
concurrent包的实现
Lock接口
Condition
Condition的实现
等待队列
等待
通知
LockSupport
其他
ThreadLocal
set(T):设置一个值
Fork/Join
Fork/join的设计
1.分割任务
2.执行任务合并结果
Disruptor并发框架
线程通信
共享内存
线程之间共享程序的公共状态,通过写-读内存中的公共状态继续隐式通信
消息传递
线程之间必须通过发送消息来显示进行通信
并发集合
ConcurrentHashMap
什么是HashMap
高并发下的HashMap
什么是ConcurrentHashMap
ConcurrentHashMap的数据结构
ConcurrentHashMap的初始化
ConcurrentHashMap允许多个并发读写进行?
ConcurrentHashMap的Size操作
ConcurrentHashMap get操作
ConcurrentHashMap put操作
ConcurrentLinkedQueue
如何实现一个线程安全的队列?
1.使用阻塞算法
2.使用非阻塞算法
ConcurrentLinkedQueue
入队列
出队列
Java中的阻塞队列
ArrayBlockingQueue
LinkedBlockingQueue
PriorityBlockingQueue
DelayQueue
使用场景
1、缓存系统设计
2、定时任务调度
SynchronousQueue
LinkedTransferQueue
LinkedBlockingQueue
CopyOnWrite
CopyOnWriteArraylist
CopyOnWriteArraySet
CopyOnWrite容器介绍
使用场景
黑白名单
读多写少
优缺点
线程池
Execuror
ThreadPoorExecuror
构造方法参数
corePoorSize
maximumPoolSize
keepAliveTime
timeUnit
workQueue
PriorityBlockingQueue
ArrayBlockingQueue
LinkedBlockingQueue
SynchronousQueue
ThreadFactory
handler
AbortPolicy
CallsRunsPolicy
DiscardOldestPolicy
DiscardPolicy
种类
Callable和Future
ScheduLedExecuoroService
合理配置线程池
线程的监控
原子操作
基本类型
AtomicBoolean
AtoMicInteger
AtoMicLong
数组
AtomicIntegerArray
AtomicLongArray
AtomicReferenceArray
引用类型
AtomicReference
AtomicReferenceArrayFieldUpdater
原子更新字段类
AtomicIntegerFieldUpdater
AtomicLongFieldUpdater
AtomicStampedFieldUpdater
Java如何实现原子操作
1.使用循环CAS实现原子操作
2.锁
内存模型
重排序
重排序对多线程的影响
顺序一致性
数据竞争与顺序一致性
顺序一致性内存模型
同步线程的顺序一致性效果
未同步程序的执行特性
happends-before
定义
规则
1、程序次序规则:在一个单独的线程中,按照程序代码的执行流顺序,(时间上)先执行的操作happen-before后执行的操作。
2、管理锁定规则:一个unlock操作happen-before后面(时间上的先后顺序,下同)对同一个锁的lock操作。
3、volatile变量规则:对一个volatile变量的写操作happen-before后面对该变量的读操作。
4、线程启动规则:Therad对象的start方法happen-before此线程的每一个动作。
5、线程终止规则:线程的所有操作都happen-before对此线程的终止检测,可以通过Thread.join()方法结束、Threwad.isAlive()的返回值等手段检测到线程已经终止执行。
6、线程中断规则:对线程interrupt()方法的调用happen-before发生于被终端线程的代码检测到终端事件的发生。
7、对象终结规则:一个对象的初始化完成(构造函数执行结束)happen-before它的finalizi()方法的开始。
8、传递性:如果操作A happen-before 操作B,操作B happen-before 操作C,那么可以得出A happen-before操作C。
as-if-serial
JMMd的内存可见性保证
0 条评论
下一页