并发编程
2019-11-11 13:54:17 3 举报
AI智能生成
登录查看完整内容
并发编程复习图
作者其他创作
大纲/内容
静态变量
局部变量
ThreadLocal修饰
线程封闭
本地内存
主内存
编译器重排序
指令级并行重排序
内存系统的重排序
重排序
loadload barries
storeload barries
loadstore barries
StoreLoad Barriers
内存屏障类型
happen-before原则
内存模型的基础
Java并发机制的底层实现原理
volatile的原理
内存屏障
缓冲行
原子操作
写命中
写缺失
cpu术语
Lock前缀指令会引起处理器缓存回写到内存
一个处理器的缓存回写到内存会导致其他处理器的缓存无效
表现形式
monitorenter
monitorexit
原理
java对象头
偏向锁
轻量级锁
重量级锁
锁的升级与对比
synchronized的实现原理
使用总线锁保证原子性
使用缓存锁保证原子性
处理器实现
CAS实现
ABA问题
循环时间长开销大
每次只能修改一个变量
CAS三个问题
使用锁机制实现原子操作
java实现
原子操作的实现原理
java内存模型
数据依赖性
as-if-serial语义
顺序一致性模型
volatile的特性
重排序规则
实现
内存语义
volatile内存语义
锁的释放和获取的内存语义
lock指令前缀
公平锁与非公平锁
锁的内存定义
写final域
读final域
final域为引用对象
final域的重排序规则
final域的内存定义
定义
规则
happens-before
双重检查锁的初始化
并发容器和框架
get
扩容
put()
size()
分段锁
1.7
1.8
ConcurrentHashMap实现原理
offer(E e)
定位尾结点
设置入队节点为尾结点
HOPS的设计意图
入队列
poll()
出队列
非阻塞队列ConcurrentLinkedQueue
ArrayBlockingQueue
LinkedBlockingQueue
PriorityBlockingQueue
缓存系统的设计
定时任务调度
应用场景
DelayQueue
SynchronousQueue
transfer方法
tryTransfer方法
LinkedTransferQueue
LinkedBlockingDeque
java中的阻塞队列
阻塞队列的实现原理
阻塞队列
工作窃取
RecursiveAction
代码示例
RecursiveTask
Fork/Join框架的异常处理
fork
join
实现原理
fork/join框架
线程池
使用线程池的好处
降低资源消耗
提高响应速度
提高线程的可管理性
new一个线程池所需参数
核心线程数量-corePoolSize
最大线程数量-maximumPoolSize
存活时间-keepAliveTime
时间单位-unit
ThreadFactory
工作队列-workQueue
拒绝策略-handler
CallerRunsPolicy
AbortPolicy
DiscardPolicy
DiscardOldestPolicy
提交任务
execute(Runnable)
Future<T> submit(Callable)
关闭线程池
shutdown()
shutdownNow()
13个原子类
原子更新基本数据类
AtomicBoolean
AtomicInteger
AtomicLong
原子更新数组类
AtomicIntegerArray
AtomicLongArray
AtomicReferenceArray
原子更新引用类型
AtomicReference
AtomicReferenceFieldUpdater 原子更新引用类型里面的字段
AtomicMarkableReference:原子更新带有标记位的引用类型
原子更新字段类
AtomicIntegerFieldUpdater:原子更新整型的字段的更新器
AtomicLongFieldUpdater:原子更新长整型字段的更新器
AtomicStampedReference:原子更新带有版本号的引用类型
并发编程
并发编程的挑战
上下文切换
并行和并发的区别
无锁并发编程
cas算法
使用最少线程
协程
减少上下文切换
死锁
demo
减少一个线程获取多个锁
避免一个锁占用多个资源
使用超时锁
对于数据库锁,加锁和解锁必须在一个数据库连接里
避免死锁的方法
并发编程基础
更多的cpu使用
更快的响应时间
更好的编程模型
使用多线程的好处
线程优先级
线程状态
Daemon线程
线程的简介
启动线程
中断
过期的suspend()、resume()和stop()
安全终止线程
启动和终止线程
volatile和synchronized关键字
notify()
notifyAll()
wait()
wait(long)
注意点
等待/通知机制
管道输入/输出流
thread.join()
ThreadLocal
线程间的通信
java中的锁
独占锁 demo
Lock接口
setState()
getState()
volatile state
获取
释放
独占式同步状态获取与释放
共享式同步状态获取与释放
代码
详解
独占式超时获取同步状态
同步队列
队列同步器-AQS
可重入实现
公平与非公平锁
ReentrantLock
读写状态的设计
写锁的获取与释放
getReadHoldCount()
读锁的获取与释放
锁降级
ReentrantReadWriteLock
park()方法何时返回?
LockSupport
demo1
demo2-有界阻塞队列
等待队列
等待
通知
Condition的实现
Condition
Executor框架
框架简介
两级调度模型
框架结构
任务
Runnable
Callable
任务的执行
异步计算的结果
框架成员
Executors
创建ThreadPoolExecutor
newFixedThreadPool(nThreads)
newCachedThreadPool()
newSingleThreadExecutor()
创建ScheduledThreadPoolExecutor
newScheduledThreadPool(int)
newSingleThreadScheduledExecutor()
把一个Runnable包装成一个Callable的API
Callable<T> callable(Runnable task)
Future
Runnable接口和Callable接口
ThreadPoolExecutor详解
FixedThreadPool
SingleThreadExecutor
CachedThreadPool
ScheduledThreadPoolExecutor详解
执行步骤
ScheduledFutureTask
FutureTask详解
未启动
已启动
已完成
cancel(boolean)
简介
使用
1.7版本及以前
1.8版本
编码规定
阿里巴巴规约
并发工具类
CountDownLatch
countDown()
await()
await(long time,TimeUnit unit)
getCount()
栅栏-CyclicBarrier
new CyclicBarrier(int,RunnerAble)
使用场景-拼多多
信号量-Semaphore
使用场景
流量控制
Exchanger
生产者消费者模式
线上问题定位
性能测试
任务隔离
重试策略
注意事项
任务属性
异步任务池
并发编程实践
0 条评论
回复 删除
下一页