JAVA 内存模型
- 工作内存和主内存
- 工作内存和主内存的交互规则
3 .交互的八种操作
- lock(锁定):作用于主内存的变量,把一个变量标识为一条线程独占的状态
- unlock(解锁):作用于主内存的变量,把一个处于锁定状态的变量释放出来,释放后才能被其他线程使用。
- read(读取):作用于主内存变量,把一个变量的值从主内存传输到线程的工作内存中,方便随后的load动作使用。
- load(载入): 作用于工作变量内存,它把read操作从主内存中得到的变量的值放到工作内存的变量副本中。
- use(使用):作用于工作内存的变量,它把工作内存变量的值传递个执行引擎,
- assign(赋值):作用于工作内存的变量,它把一个从执行引擎接收到的值赋值给工作内存。
- store(存储):作用于工作内存的变量,它把工作内存中一个变量的值,传到主内存中个,以便之后的write操作使用
- write(写入):作用于主内存变量,它把store操作从工作内存的值赋值到主内存。
4. 规则
- 不允许read和load,store和write操作之一单独出现。
- 不允许一个线程丢弃它最近的assign操作。
- 不允许一个线程无原因(没有assign)的把数据同步到主内存中。
- 一个新的变量只能诞生在主内存中,
- 一个变量同一时刻只允许一条线程对其进行lock操作。但lock操作可以被同一个线程执行多次(锁可重入)
- 如果对一个变量进行lock操作,会清空工作内存中此变量的值。
- 如果一个变量没有事先没有被lock操作锁定,则不允许对它执行unlock操作,也不允许去unlock一个被其他线程锁定的变量。
- 对一个变量执行unlock操作前,必须把此变量同步到主存中。
6.happen-before
7. 原子性,有序性,可见性
多线程基础
- Object类线程相关的方法
- Thread 类线程相关的方法
- 线程的状态
- New
- Runable
- Waiting
- Timed Waiting
- Blocked
- 关键字
- synchronize(同步锁)
- 同步
- 可重入
- volatile
- 内存可见性
- 指令重排
- synchronize(同步锁)