Java中volatile修饰符,不稳定标记的用法笔记

今天学java特性时,发现了volatile修饰符,这个修饰符修饰的变量告诉java编译器忽略优化机制,这样的优势是:

java优化后,寄存器会缓存内存里的变量,另一个线程修改这个变量的内存时,不会同步到另一个线程变量的寄存器,加上volatile修饰符后,java不会增加寄存器缓存机制,这样会让变量直接读写内存,达到多线程协调作用.总结一句话为可见性。

应用场景:

1、多线程变量读取时,多个线程可以都读内存,另一个线程修改变量内存,而本线程还在读取寄存器中的变量,导致死循环

2、单例时使用,在单例时可以使用volatile,在多线程时使用内了个内存变量,不会导致构造函数还执行时,就把变量给拿走了,导致异常。

lock和synchronized的区别:

synchronized是java里面的锁,lock是系统级别锁,synchronized在发生异常时可以释放锁,而lock不可以。

原文地址:https://www.cnblogs.com/a-xu/p/8401266.html