并发编程
2020-05-12 15:35:58 0 举报
AI智能生成
关于并发编程的一些知识点,持续更新中....欢迎点赞收藏
作者其他创作
大纲/内容
线程池
什么是线程池?为什么要用线程池
JDK中的线程池
线程池的创建
corePoolSize
maxmumPoolSize
keepAliveTime
unit
workQueue
threadFactory
RejectedExecutionHandler
AbortPolicy
CallerRunsPolicy
DiscardOldestPolicy
DiscardPolicy
提交任务
execute()
submit()
关闭线程池
shutdown
shutdownNow
线程池工作机制
合理配置线程池
系统为我们预定义的线程池
FixedThreadPool
SingleThreadExecutor
CachedThreadPool
ScheduledThreadPoolExecutor
ScheduledThreadPoolExecutor
SingleThreadScheduledExecutor
WorkStealingPool
Executor框架
CompletionService
使用
优点
线程复用和ThreadLocal
并发安全
类的线程安全
如何做到类的线程安全
栈封闭
无状态
让类不可变
加final关键字
根本就不提供任何可供修改成员变量的地方,同时成员变量也不作为方 法的返回值。
volatile
加锁和CAS
安全的发布
ThreadLocal
线程不安全引发的问题
死锁
原因
表现
简单顺序死锁
动态顺序死锁
检测和解决
活锁
线程饥饿
多线程程序性能和思考
影响性能的因素
减少锁的竞争
减少锁的粒度
缩小锁的范围
避免多余的锁
锁分段
替换独占锁
线程安全的单例模式
如何让双重检查锁定安全
懒汉式
饿汉式
实战项目
JMM和底层实现原理
现代计算机物理上的内存模型
概念
带来的问题
伪共享
Java内存模型(JMM)
JVM对Java内存模型的实现
带来的问题
可见性问题
竞争问题
重排序
类型
编译器优化的重排序
指令级并行的重排序
内存系统的重排序
依赖性
数据依赖性
as-if-serial
控制依赖性
内存屏障
临界区
Happens-Before
定义
规则
volatile的内存语义
概念和深入理解
内存语义的实现
重排序规则
内存屏障插入策略
锁的内存语义
final的内存语义
volatile的实现原理
synchronized的实现原理
线程基础、线程
之间的共享和协作
之间的共享和协作
启动和终止线程
启动线程
继承thread类
实现runnable接口
不允许有返回值
实现callable接口
允许有返回值
终止线程
自然执行完
抛出异常
线程不会自己释放资源
stop()
suspend()挂起
resume()继续执行
安全的停止工作
interrupt()
isInterrupted()
static 的 interrupted()
线程再认识
线程常用方法
start()线程的启动者
run()线程任务的运行者
join()把指定线程加入到当前线程
yield()线程让步,执行后不释放锁
wait()
sleep(),执行后不释放锁
notufy()\notifyAll()
interrupt()
setDeamon()
setDeamon(true)设置为守护线程
setDeamon(false)设置为用户线程
线程的状态
新建
就绪
运行
阻塞
死亡
线程的优先级
线程间的共享
synchronized
对象锁
类锁
volatile
ThreadLocal
线程的并发工具类
Fork/Join
CountDownLatch
原理
应用场景
CyclicBarrier
原理
应用场景
Semaphore
原理
应用场景
Exchange
Callable、Future和FutureTask
原子操作CAS
CAS的原理
CAS的问题
ABA问题
开销
只能保证一个共享变量的原子操作
原子操作类的使用
基本类型
数组
引用
带版本戳
显式锁和AQS
显式锁
Lock接口、核心方法和使用
Lock接口和synchronized的比较
ReentrantLock
可重入锁
锁的公平和非公平
ReentrantReadWriteLock
ReadWriteLock接口
使用场景
Java8中的StampLock
Condition接口
用处
用Lock和Condition实现等待通知
了解LockSpport
AbstractQueuedSynchronizer
什么是AQS?学习它的必要
AQS使用方式和其中的设计模式
了解其中的方法
实现一个自己的独占锁
先了解CLH队列
深入源码
AQS中的数据结构
节点在同步队列中的增加和移出
子主题
子主题
并发容器
ConcurrentHashMap
1.7中HashMap死循环分析
HashTable是如何实现线程安全的
使用
实现
基本思想
预备知识
Hash
位运算
JDK1.7
构造方法
如何定位
get方法
put方法
扩容
JDK1.8
构造方法
如何定位
get方法
put方法
扩容
其他并发容器
阻塞队列
0 条评论
下一页