并发
2022-07-23 10:04:14 14 举报
AI智能生成
Java并发
作者其他创作
大纲/内容
锁
死锁问题
产生死锁问题的条件(四个)
互斥(资源是互斥的,不能被多个资源访问)
互斥之后请求和保持(请求新资源的时候,不会释放新的资源;请求新的锁的时候,不会释放新的锁)
环路等待
不可剥夺
线程获取锁后,不能被其他线程抢走
如何解决死锁问题
破坏4个条件任意一个
银行家算法
synchorized
类锁
静态方法上
代码块synchorized(xxx.class)
对象锁
普通方法上
this
使用上
静态
代码块
普通方法
锁升级(过程)
偏向锁-》轻量级锁
轻量级锁-》重量级锁
特点
不可逆
基本原理
monitorenter
monitorexit
监视器仅允许一个对象进入
特点
可重入
非公平
重量级锁
悲观锁
volatile
特点
不是锁
保证可见
不保证原子性
讲
从JVM内存模型来讲
对本地内存的修改,立即刷新到主内存,并且声明其他缓存无效
并立即写入到其他线程的缓存中
底层原理
插入lock前缀指令,引起内存屏障
应用场景
双重校验锁
防止重排序
原子类
AQS
达到锁的功能
volatile+CAS
lock接口
ReentrantLock(可重入锁)
公平模式
非公平模式
CAS
组成
内存地址
原始值的预期值
目标值
当内存地址的值与原始的值的预期不同(原始值受到其他线程修改),就不能释放
ABA问题
AQS
组成
volatile修饰的共享变量
一些通过模板方法实现的方法
节点的封装
没有获取到锁的线程把自己封装成一个节点放到CLH队列
模板设计模式
进程、线程、协程
进程
线程
并发
多个线程同时操作一个数据
并行
多个线程同时操作多个数据
高速公路
线程的几种状态
new新建
start就绪
wait等待
超时、等待状态
阻塞
synchronized没抢到锁
结束
协程
进程、线程、协程之间的区别
线程通讯
共享内存
wait/notify
线程池
参数
核心参数
队列长度
最大线程数
等待时间
拒绝策略
丢弃任务,抛出异常
丢弃任务,不抛异常
抛队列前面的,重复提交
交由提交任务的线程执行
种类
ThreadPoolExecutor
Executors
JDK自带的几个线程池
固定线程池
一个线程的线程池
缓存线程池
定长线程池
0 条评论
下一页
为你推荐
查看更多