变量增加2个线程而不同步

时间:2018-02-03 20:09:45

标签: java

在一次采访中,我被问到一个问题,即变量在没有同步的情况下由2个线程增加200次,变量的最大值和最小值是多少? 请有人帮我解答。

变量int的类型 每个增量为1.
初始值不告诉我。

2 个答案:

答案 0 :(得分:3)

这里有趣的问题是这个面试问题是开放式的。

在面试中回答这个问题的唯一合理方法是缩小未知数。

  • 您知道开头的变量类型吗?将short增加long会很尴尬。
  • 我们知道启动的变量是什么吗?它可以从我们所知道的Integer.MIN_VALUE开始,因此" max"可能是一个非常小的数字。

  • 你知道变量增加了多少?增量假定 +1,但情况可能并非如此。

这是您在不了解实施细节的情况下回答问题的方法;在尝试回答之前,请确保缩小要求并获得范围和起始期望的具体细节。

对于实际的编码部分,请考虑任一线程都可以看到陈旧数据。无法保证变量会增加超出您调用它的次数(乘以增量值),因此 是硬顶和楼层。两者都取决于你消除未知数的歧义。

答案 1 :(得分:-2)

考虑到200的增量没有,假设每个增量为1,我猜的变量类型是: -

  • Max =可变电流值+ 400,
    考虑最坏情况,第一个线程将值递增200次,然后第二个线程将其递增200次。
  • 最小=可变电流值+ 2
    1. Thread1& Thread2复制变量。
    2. Thread1递增199次。如此变数 变为变量+ 199
    3. Thread2递增一次。所以变量变为变量+ 1
    4. Thread1复制变量(value = variable + 1)
    5. Thread2递增199 倍。所以变量变为变量+ 200
    6. Thread1递增一次。如此变数 变得变量+ 2

max和min将取决于可变电流值和每个增量大小,此处假设为1。