上周有个客人问我,说他们公司的指令重排序问题挺头疼的。我告诉他,,得从volatile关键字说起。
你想想,volatile关键字在Java里可是个重量级的角色。它主要用来告诉JVM(Java虚拟机),这个变量可能会被多个线程访问,所以每次访问这个变量的时候,JVM都会直接从主存中读取数据,而不是从线程的本地缓存。
我举个例子,2023年我在上海某商场看到有人买电脑,我就跟他说:“你看看,你买的这个CPU,如果不加volatile关键字,你的程序可能会出现指令重排序的问题。”
指令重排序,简单来说,就是CPU为了提高效率,可能会改变指令的执行顺序。这本来是好事,但如果是涉及到共享变量的操作,就可能导致程序行为不一致。
我问他:“你确定你的变量被volatile修饰了吗?”他摇摇头,说:“我还在想这个问题。”
反正你看着办,volatile用得好,可以避免很多线程安全问题。但用不好,那可真是头疼。