【问题标题】:Possible output of Two threaded program两个线程程序的可能输出
【发布时间】:2023-02-22 20:24:39
【问题描述】:

Test Question

问题是 main 末尾的 count 的值是多少。 测试中的答案在 10 到 20 之间。 但是 count 不是 Atomic 并且 Counter 不是同步的,所以输出范围 实际上应该是 2 到 20?

我描述的运行示例, Thread A read 0.(count = 0) Thread B read and write 0 to 9.(count = 9) Thread A write 1.(count = 1) Thread B read 1.(count = 1) Thread A read and write 1 to 10.(count = 10) Thread B write 2.(count = 2)

【问题讨论】:

    标签: java multithreading correctness


    【解决方案1】:

    如果幸运的话,线程会以触发器的方式完成它们的工作,你会得到20(没有并发修改)

    如果你非常不走运,两个线程的所有 10 次迭代将“同时”发生,这将导致增量结果之一被“丢弃”(在一个线程或另一个线程中),你将得到 10

    为什么你期望输出为 2,这对我来说是个谜。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-08
      • 1970-01-01
      • 1970-01-01
      • 2017-09-12
      相关资源
      最近更新 更多