本文暂不讲JMM(Java Memory Model)中的主存, 工作内存以及数据如何在其中流转等等,
这些本身还牵扯到硬件内存架构, 直接上手容易绕晕, 先从以下几个点探索JMM
原子性
有序性
可见性...例如CPU中的一些指令, 属于原子性的,
又或者变量直接赋值操作(i = 1),, 也是原子性的 即使有多个线程对i赋值, 相互也不会干扰....而如i++, 则不是原子性的, 因为他实际上i = i + 1, 若存在多个线程操作i, 结果将不可预期.
?
有序性
有序性是指在单线程环境中, 程序是按序依次执行的....硬件优化(如写吸收,批操作)
cpu2修改了变量T, 而cpu1却从高速缓存cache中读取了之前T的副本, 导致数据不一致.
?
编译器优化
主要是Java虚拟机层面的可见性, 下文会有详细讲述....对象终结
对象的构造函数执行结束先于finalize()方法.