i的初始值为0,i++在两个线程里面分别执行100次,能得到最大值和最小值分别是多少

最大值:200 最小值:2

最大值情况自然是两个线程分别依次执行完。

最小值情况:

操作流程1(线程1) 线程1先读i=0,紧接着线程1 i++ 99次 ,此时i的值为99,但未写入到内存中

操作流程2(线程2) 因为操作1未写入到内存中,内存中i=0,线程2从内存中取i=0

操作流程3(线程1) 线程1将i=99写入到内存中,此时内存的值为99

操作流程4(线程2) 线程2此时使用的i是自己的i值,不是内存中i=99这个值.执行i++后,i=1,并将i=1写入到内存中,覆盖了之前内存i=99的值

操作流程5(线程1) 此时线程1读内存的i=1,执行i++,得到i=2 。加上操作流程3中线程1的99次i++操作和本次i++操作,共计为100次操作,但未将i=2写入到内存中

操作流程6(线程2) 线程2按照操作4中的i=1,执行i++99次后,得到i=100。加上操作4中一次i++操作,正好是100次操作。i++在两个线程里面分别执行100次操作结束。

操作流程7(线程2) 线程2将i=100写回内存中 ,此时内存i=100

操作流程8(线程1) 线程1将i=2写回内存,覆盖掉内存中i=100 ,故i=2

点赞

当前页面评论已关闭。

隐藏
变装