多线程更新值java

多线程更新值java,java,multithreading,Java,Multithreading,我们有两个线程: 他们没有任务调度 它们也没有同步机制 他们的任务是: 将值读入寄存器 递增寄存器中的值 将值写回位置X 开始时,X包含值0。两个线程在同一位置修改值 两个线程同时启动并执行1000次迭代 问题:两个线程完成后的最小值X是多少? (不是1000,也不是2000)最小可能的数字是2 T1 reads the value 0. T2 increments X 999 times to 999. T1 writes the value 1 T2 reads the value

我们有两个线程:

  • 他们没有任务调度

  • 它们也没有同步机制

他们的任务是:

  • 将值读入寄存器

  • 递增寄存器中的值

  • 将值写回位置X

开始时,X包含值0。两个线程在同一位置修改值

两个线程同时启动并执行1000次迭代

问题:两个线程完成后的最小值X是多少?
(不是1000,也不是2000)

最小可能的数字是2

T1 reads the value 0.
T2 increments X 999 times to 999.
T1 writes the value 1
T2 reads the value 1
T1 increments X 999 times to 1000
T2 writes the value 2.

Java的“进入寄存器”定义得好吗?好吧,你怎么看?为什么?这是一个家庭作业问题吗?因为听起来很像。在这种情况下,请至少提供一些你认为解决方案是什么以及你不确定的地方。@AurA这根本不是真的<代码>易失性不能替代正确的同步。(编辑:编辑之前的建议是使用
volatile
)@AurA这是真的,但你试图回答一个不存在的问题。仔细阅读OP的问题,就在这里。我确信答案是1或2,但我无法确定事件的顺序+1.+1干得好。我一直在想这样的解决办法,但无法理解。简洁的解释也不错。我觉得应该在1+-1左右。谢谢