1、原子性(Atomicity)
不可中断的操作,即使是多个线程一起执行的时候,也不会被其他线程干扰
2、可见性(Visibility)
当一个线程修改了某一个共享变量的值,其他线程是否能够立即知道这个修改
3、有序性(Ordering)
重排指令可以保证串行语义一致,但没有义务保证多线程之间的语义也一致
Happen-Before原则:
程序顺序原则:一个线程内保证语义串行
volatile规则:volatile变量的写,先发生于读
锁规则:解锁必然发生于随后的加锁前
传递性:A先与B,B先于C,那么A必然先于C
线程的start()先于它的每一个动作
线程的所有操作先于线程的终结Thread.join()
线程的中断先于被中断的代码
对象的构造函数执行,结束先于finalize()方法