Sleep 抱锁休眠
TimeUnit juc 休眠工具类 TimeUnit.SECONDS.sleep();
Synchronized java 关键字 ,自动释放,细腻度低,会发生死锁
wait 释放锁等待 notify唤醒
Lock 接口,手动释放,细腻度高,自行处理锁问题
Condition 监视器
await 释放锁等待
signal 唤醒
ReentrantLook 可重入锁 look的一种实现。
ReentrantReadWriteLock 读写分离锁 。
CountDownLatch 多线程工具类 计数器减 初始化线程数 可等待数量减到0。
CyclicBarrier 多线程工具类 计数器加 可等待数量增加到指定数量。
Semaphore acquire() release()多线程工具类 限流 同时存在最大并发线程数。
阻塞队列 BlockingQueue
BlockingQueue 4组api
同步队列SynchronousQueue :只会有一个在线程在执行其他等待。
池化技术 3个方法 Executor:本质都是ThreadPoolExecutor ,明确规定不能使用,需要手动创建,会发生内存溢出。
ThreadPoolExecutor 7大参数 4个拒绝策略
最大线程数设置:
CPU型 : 根据电脑核数设置
IO型:根据最大占用内存数*2
只有一个方法的接口叫函数式接口
Function函数式接口,Predicate断定型接口,Consumer消费型接口,Supplier生产型接口
Stream 流式计算
ForkJoin :分支合并,线程递归最后合并。
异步回调:
JMM(java memory model):java 内存模型 ,并不实际存在。当工作内存获取主内存中的值时的操作约定。
加锁look解锁unlook
读取read加载load
使用use归于assign
存储store写入wirte
volatile :java关键字,保证线程可以见型,不保证原则性。禁止指令重排(涉及内存屏障,在执行代码时在上下文中增加屏障,保证不发生重排)。
实现原子操作 AtomicReference
指令重排:计算机底层执行会发生执行顺序重新排序,会保证运行,但不保证正确)
单例(保证程序中只有一个类实例)
cas compareandswap (比较替换):期望值,内存值,新值。当期望值与内存值相等时,替换成新值。
aba (狸猫换太子):b不知道a修改过值。
解决方法 带版本号 version
可重入锁 (递归锁):在本身持有锁时还能再次获取本身锁。
自旋锁(乐观锁):循环直到获取锁
死锁排除(jps,jstack)
读写锁 : 写独占,读共享。
AQS:AbstractQueueSynchronizer抽象队列同步
CountDownLatch,Sammphore,ReentrantLock,ReentrantReadWriteLock等等都是基于AQS实现
- state(用于计数器)
- 线程标记(哪一个线程加的锁)
- 阻塞队列(用于存放阻塞线程)