1. 没有volatile会出现什么问题? 在java里面每个线程都有自己的工作内存,工作内存中的变量是从主存中读取的,当有多个线程都读取并修改主存中数据时,会出现一个线程对主存的修改对其它线程不可见的问题;另外还有一个问题,就是java代码会存在指令级别的重排,volatile 就是能解决线程之间共享变量的可见性,还有就是禁止指令重排。 2. volatile的例子 指令重排的问题: 在下图中有两个方法分别为actor1和actor2,这两个方法分别被两个线程执行,下面的r1的结果可能为 r1 = 4; 线程2先…