数据竞争 int a=0, b=0; public void method1() { int r2 = a; b = 1; } public void method2() { int r1 = b; a = 2; } 上述代码中,定义了两个共享变量 a 和 b,以及两个方法.在单线程分别调用方法一和方法二后,r1 和 r2 的值可能是(1,0) 或者是(0,2).如果是在多线程环境下,两个方法分别跑在两个线程上,假设 Java 虚拟机在执行了任一方法的第一条赋值语句之后便切换线程,那么最终 r1…