知识点汇总java
1.1 竞争条件与临界区mysql
1.2 死锁检测与防止面试
1.3 产生条件
互斥
请求并持有
非剥夺
循环等待sql
NEW:建立多线程
RUNNABLE:可运行并发
REDAY:就绪态异步
RUNNING:运行态工具
BLOCKED:获取锁失败进入BLOCKED状态,获取锁时进入REDAY态优化
TIME_WAITING:超时等待ui
WAITING:无超时等待
TERMINATED:结束
掌握5种状态便可(新建、就绪、运行、阻塞、死亡)
一、CAS
二、synchronize
三、lock
CAS是乐观锁,轻量级锁,经过比较值是否被更改来判断。
缺点:可能会出现的ABA(上图右)的问题,不必定会影响结果,解决办法是提供额外的标志位或者时间戳(相似于mysql version字段)。
方法同步:经过java的高级字节码指令ACC_SYNCCHRONIZED标志来实现。
代码块同步:经过java的两个高级字节码指令monitorenter和monitorexit来实现。
锁优化机制:
一、偏向锁:先使用偏向锁
二、轻量锁:获取偏向锁失败则升级为CAS轻量锁
三、自旋锁:获取轻量锁失败,则进行短暂的自旋
四、重量级锁:以上都失败则升级为重量级锁
lock锁代码块,相似与cas
一、固定大小线程池:线程池固定,使用的是无界缓冲队列,适用于任务数量不均匀的场景,也适用于对内存压力不敏感,对系统负载比较敏感的场景。
二、Cached线程池:不限制建立的线程数,适用于要求低延迟的短时间任务的场景。
三、单线程线程池:一个线程的固定线程池,适用于须要异步执行,但要保证线程执行顺序的场景。
四、Scheduled线程池:适用于按期执行任务的场景,支持按固定的频率或者固定延时来执行的场景。
五、工做窃取线程池:适用于任务时长不均匀的场景。
参数介绍:
corePoolSize:核心线程数,核心线程会一直存活。
maximumPoolSize:最大线程数,决定线程池最多能够建立多少线程。
keepAliveTime:空闲时间,当线程闲置超过空闲时间时就会被销毁。
uint:空闲时间的单位。
workQueue:缓冲队列
ArrayBlockingQueue:有界队列,有最大容量闲置。
LinkedBlockingQueue:无界队列,不限制容量。
SynchronousQueue:同步队列,内部没有缓冲区。
threadFactory:设置线程池工厂方法,用来建立新的线程方法,能够对线程的属性进行定制,例如线程的group,线程名等,通常使用默认的工厂类便可。
handler:线程池满时的拒绝策略,
Abort:线程池满后,提交新任务时,会抛出异常,默认拒绝策略。
Discard:线程池满后,提交新任务时,对任务进行丢弃。
CallerRuns:线程池满后,提交新任务时,会直接执行提交的任务。
DiscardOldest:线程池满后,提交新任务时,会丢弃最先提交的任务。
各种线程池调用参数方法:
固定大小线程池:
corePoolSize和maximumPoolSize:设置成指定的线程数
workQueue:LinkedBlockingQueue
Cached线程池:
corePoolSize:0
maximumPoolSize:Integer.MAX_VALUE
keepAliveTime:60
workQueue:SynchronousQueue
单线程线程池:
corePoolSize和maximumPoolSize:1
Scheduled线程池:
workQueue:DelayWorkQueue,按延迟时间获取任务的优先级队列
调用方法:
一、execute
二、submit:能够返回一个future对象,根据future对象能够了解任务的执行状况,能够取消任务的执行,还能够获取任务的执行结果或者执行异常。
用于处理多线程常见问题的库
表格第一行:基本数据类型的原子类。
表格第二行:对对象提供的原子类。
表格第一行:锁相关的类。
表格第二行:异步执行相关的类。
表格第一行:经常使用的阻塞队列。
表格第二行:控制多线程协做使用的类。
表格第三行:经常使用的并发集合。
面试考察点与真题
wait:Object方法,会释放对象锁,须要在同步块中使用,不须要捕获异常。
sleep:Thread方法,不会释放对象锁,任何地方使用,须要捕获异常。
六、适用于读并发多,写并发少的场景,也可以使用CopyOnWrite解决。
七、wait、notify机制,共享变量的sync和lock同步机制
八、cas、sync、lock、ThreadLocal等机制
九、减小临界区范围、使用ThreadLocal、减小线程切换、使用读写锁或CopyOnWrite等机制
十、ThreadLocal不是解决线程数据共享的问题,是解决数据隔离的问题。