任务定时调度
掌握Timer和TimerTask
HappenBefore
指令重排:执行代码的顺序可能与编写代码的顺序不一致,即虚拟机优化代码顺序,则为指令重排。在硬件层面和虚拟机层面都可能存在指令重排。在指令重排时,编译器和处理器会遵守数据依赖性。不会随意更换顺序。
valatile
它保证了线程间变量的可见性。它保证了同步的数据可见,也被称为轻量级的synchronized。但是它不能保证原子性。只保证了数据的同步。现在已经很少用了。
单例模式
了解它的套路以及DoubleChecking
ThreadLocal
ThreadLocal:每个线程的本地存储区域。
JDK中常用private static修饰
ThreadLocal:常用方法get/set/initialValue。
ThreadLocal:分析上下文环境 看起点
- 1 构造器: 哪里调用就属于哪里 主要找线程体
- 2 run方法:就是本线程自己的。
InheritableThreadLocal<>()子类 ;继承上下文环境的数据,一样找起点。
- 拷贝一份给子线程
可重入锁
锁的分类
按是否可以沿用分为:不可重入锁和可重入锁
可重入锁又分为公平锁和不公平锁。
悲观锁:synchronized就是独占锁,即悲观锁,它会导致其他需要锁的线程挂起,直到持有锁的线程释放锁。
乐观锁:每次不加锁而是假设没有冲突去完成某项操作,如果因为冲突失败就一直重试,直到成功为止。
同步块中如果是成员方法,则锁定this,如果是静态方法,则锁定 相应对象.class
程序的原子性指:整个程序中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。
原子性操作:原子性在一个操作是不可中断的,要么全部执行成功要么全部执行失败,有着“同生共死”的感觉。及时在多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程所干扰。
java.util.concurrent(简称JUC )