我在一个紧密循环中有两个不同步的线程,将全局变量递增 X 次(x=100000)。
全局的正确最终值应该是 2*X,但是由于它们是不同步的,所以它会更小,根据经验,它通常只是略高于 X
但是,在所有测试运行中, global 的值从未低于 X 。
最终结果是否可能小于 x (小于 100000 )?
public class TestClass {
static int global;
public static void main(String[] args) throws InterruptedException {
Thread t = new Thread( () -> { for(int i=0; i < 100000; ++i) { TestClass.global++; } });
Thread t2 = new Thread( () -> { for(int i=0; i < 100000; ++i) { TestClass.global++; } });
t.start(); t2.start();
t.join(); t2.join();
System.out.println("global = " + global);
}
}