并发编程
2021-03-31 10:55:00 26 举报
AI智能生成
登录查看完整内容
并发整体梳理
作者其他创作
大纲/内容
并发
并行
物理架构 只可能出现在多核
线程池
Executors.newCachedThreadPool()
实现方式
Executors.newFixedThreadPool()
Executors.newSingleThreadExecutor()
线程复用
拒绝策略
丢弃任务并抛出RejectedExecutionException异常线程池默认使用
丢弃任务,但是不抛出异常。
丢弃队列最前面的任务,然后重新提交被拒绝的任务
由调用线程(提交任务的线程)处理该任务
补充
等待唤醒机制
线程中断机制
Fork join
线程
进程
多线程
Thread: 重写run方法
状态
创建: new Thread()
就绪: 调用start()
运行: 调用run()
坏处
锁
死锁
活锁
饥饿
好处
并发编程
JMM
特性
有序性
as-if-serial
不管怎么重排序 单线程情况要保证结果不变
Happens-Before
可见性
原子性
解决的问题
屏蔽掉不同操作系统的底层差异
cpu与内存的交互
缓存一致性协议
font color=\"#f15a23\
伪共享
volatile
Synchronized
序列化访问临界资源
应用场景
font color=\"#31a8e0\
修饰方法: 隐式同步
修饰代码块: 显式同步
monitor
对象在内存中的布局
对象头
实例数据
填充数据
是由ObjectMonitor实现(c++编写)
EntryList
owner
waitSet
cas
span style=\"font-size: inherit;\
锁优化(升级)
cas(乐观锁)Compare and Swap 比较并交换
缺点
长时间自旋给cpu带来压力
ABA问题
只能针对一个属性具有原子性
应用
Atomic下的原子操作类基于cas实现
AQS
抽象队列同步器
实现(Sync)
ReentrantLock
共享锁
CountDownLatch
Sync
Semaphore
屏障锁
CyclicBarrier
0 条评论
回复 删除
下一页