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