一,volatile https://blog.csdn.net/eff666/article/details/67640648
1.作用:多线程下,某一个线程修改一个共享变量的值,那么所有的线程都能读取到新的值。保证可见性。
2.并发中内存模型:多线程下,每个cpu都会有自己的缓存,一般的共享变量都会在每一个cpu中缓存下来供使用。为了保证共享变量一致。使用lock和缓存一致性。
lock:在总线上加锁,只有等待一个线程执行完才有第二个进,效率低
缓存一致性协议:当cpu写数据时,通知其他cpu对于这个变量设置无状态,就是所有cpu缓存的数据都是无效的。然后cpu就会在内存中读取。保证一致性。
3.并发编程中的三个概念特征:
原子性:一个操作或多个操作要么全部成功,要么全部失败。转账问题
可见性:当一个线程修改共享变量时,其他线程读取到的也该是最新修改的数据
有序性:按照程序先后顺序执行逻辑处理
4.执行逻辑,原理和机制
多线程下,共享变量用这个关键字修饰。当被修改时,主存的值被修改,其他线程的缓存标识无效,去主存取值。保证所有值共享使用。且保证有序性,执行前的不变,之后按照最新的值。
5.使用场景:其实无法保证操作的原子性,需要对变量的写操作不依赖于当前值和该变量没有包含在具有其他变量的不变式中。
二。synchroniz