当然是为了提高效率,毕竟主存的读写相较于CPU中的指令执行都太慢了.
这样就会带来一个问题.当执行
i = i + 1;(i初始化为0)
语句时,单线程操作当然没有问题,但是如果两个线程操作呢?...得到的结果是2吗?
不一定.
让我们详细分解一下执行这句话的操作.
读取内存中的i=0到工作内存(1)->工作内存中的i=i+1=1(2)- > 将工作内存中的i=1刷新回主存(3)....线程1的工作内存中i=1,线程2的工作内存中i=0,之后分别进行余下的步骤,最后拿到的结果为1.
这是什么原因造成的呢?...因此,我们期望的结果是,上述Java代码执行1秒钟后停止,并且打印出1秒钟内计数器i的实际值。
然而,执行这个Java应用后,你发现它进入了死循环,程序没有停止....(2)语句,在线程2中,程序跳出了循环,执行doSomethingwithconfig,因为他认为context已经进行了初始化,然后并没有,就会出现错误.