JVM内存模型
类加载器 : new Student (这种属于隐式加载字节码) | class.forName() (这种属于显式加载字节码)
JMM内存模型(java线程内存模型)
JMM-同步八种操作介绍
(1) lock(锁定) :作用于主内存的变量,把一个变量标记为一条线程独占状态(2) unlock(解锁) :作用于主内存的变量,把一个处于锁定状态的变量释放出来,释放后的变量才可以被其他线程锁定(3) read(读取) :作用于主内存的变量,把一个变量值从主内存传输到线程的工作内存中,以便随后的load动作使用(4) load(载入) :作用于工作内存的变量,它把read操作从主内存中得到的变量值放入工作内存的变量副本中(5) use(使用) :作用于工作内存的变量,把工作内存中的一个变量值传递给执行引擎(6) assign(赋值) :作用于工作内存的变量,它把一个从执行引擎接收到的值赋给工作内存的变量(7) store(存储) :作用于工作内存的变量,把工作内存中的一个变量的值传送到主内存中,以便随后的write的操作(8) write(写入) :作用于工作内存的变量,它把store操作从工作内存中的一个变量的值传送到主内存的变量中
并发编程的可见性,原子性与有序性问题
可见性:
volatile关键字保证可见性。当一个共享变量被volatile修饰时,它会保证修改的值立即
被其他的线程看到,即修改的值立即更新到主存中,当其他线程需要读取时,它会去内存中
读取新值。
MESI缓存一致性原理
有序性:眼见不一定为真 (可以使用volatile关键字)涉及到指令重排(不太懂)

原子性:
除了JVM自身提供的对基本数据类型读写操作的原子性外,可以通过
synchronized
和
Lock
实现原子性。因为synchronized和Lock能够保证任一时刻只有一个线程访问该代码
块