synchronize和volatile 小知识点总结

·synchronized锁的是对象而不是代码,锁方法锁的是this,锁静态方法锁的是class,锁定方法和非锁定方法是可以同时执行的。

锁升级机制是从偏向锁升级为自旋锁,再升级为重量级锁。

##volatile

·volatile保证线程的可见性,同时防止指令重排序。线程可见性在CPU的级别是用缓存一致性来保证的;

禁止指令重排序cpu级别是你禁止不了的,那是人家内部运行的过程,提高效率的。但是在虚拟机级别你家的volatile之后呢,这个指令重排序就可以禁止。

严格的来讲,还是去研究他的内部,它是加了读屏障和写屏障,这个是cpu的一个原话。

·对volatile变量写操作时,会在写操作的后面加入一条store屏障指令,将本地内存中的共享变量值刷新到主内存

·对volatile变量读操作时,会在读操作的前面加入一条load屏障指令,从主内存中读取共享变量

·适用于改变不依赖于当前状态,适合做标识量

##happens-before的几个原则:

程序次序原则、锁定原则、volatile变量原则、传递原则、线程启动原则、线程中断原则、线程终结原则、对象终结原则

原文地址:https://www.cnblogs.com/SpaceKiller/p/12601365.html