Java多线程并发编程详解
2021-07-18 22:17:28 0 举报
AI智能生成
Java多线程详解,包含ConcurrentHashMap,原子类,内存模型,信号量等。
作者其他创作
大纲/内容
并发工具类
CyclicBarrier
应用场景
CountDownLatch
一个线程调用countDown方法happen-before,另外一个线程调用await方法。
CyclicBarrier和CountDownLatch的区别
Semaphone
使用场景
锁<br>
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的初始化<br>
ConcurrentHashMap允许多个并发读写进行?<br>
ConcurrentHashMap的Size操作
ConcurrentHashMap get操作
ConcurrentHashMap put操作
ConcurrentLinkedQueue
如何实现一个线程安全的队列?<br>
1.使用阻塞算法<br>
2.使用非阻塞算法
ConcurrentLinkedQueue<br>
入队列
出队列
Java中的阻塞队列
ArrayBlockingQueue<br>
LinkedBlockingQueue
PriorityBlockingQueue<br>
DelayQueue
使用场景<br>
1、缓存系统设计
2、定时任务调度
SynchronousQueue<br>
LinkedTransferQueue
LinkedBlockingQueue<br>
CopyOnWrite<br>
CopyOnWriteArraylist<br>
CopyOnWriteArraySet<br>
CopyOnWrite容器介绍<br>
使用场景
黑白名单
读多写少<br>
优缺点
线程池
Execuror<br>
ThreadPoorExecuror
构造方法参数
corePoorSize<br>
maximumPoolSize<br>
keepAliveTime<br>
timeUnit<br>
workQueue<br>
PriorityBlockingQueue
ArrayBlockingQueue
LinkedBlockingQueue
SynchronousQueue<br>
ThreadFactory<br>
handler<br>
AbortPolicy
CallsRunsPolicy
DiscardOldestPolicy
DiscardPolicy<br>
种类<br>
Callable和Future<br>
ScheduLedExecuoroService<br>
合理配置线程池
线程的监控
原子操作
基本类型
AtomicBoolean<br>
AtoMicInteger
AtoMicLong<br>
数组
AtomicIntegerArray
AtomicLongArray
AtomicReferenceArray<br>
引用类型<br>
AtomicReference<br>
AtomicReferenceArrayFieldUpdater
原子更新字段类
AtomicIntegerFieldUpdater
AtomicLongFieldUpdater
AtomicStampedFieldUpdater
Java如何实现原子操作
1.使用循环CAS实现原子操作
2.锁
内存模型
重排序
重排序对多线程的影响
顺序一致性
数据竞争与顺序一致性<br>
顺序一致性内存模型
同步线程的顺序一致性效果
未同步程序的执行特性
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 条评论
下一页