【问题标题】:If multiple objects access new object instance then synchronization is not required?如果多个对象访问新对象实例,则不需要同步?
【发布时间】:2015-05-26 15:54:52
【问题描述】:

https://docs.oracle.com/javase/tutorial/essential/concurrency/interfere.html 状态

计数器被设计成每次调用增量都会加 1 c,每次调用减量都会从 c 中减去 1。然而, 如果一个 Counter 对象被多个线程引用,干扰 线程之间可能会阻止这种情况按预期发生。

如果多个线程引用同一个 Counter 对象实例,这是真的吗?如果多个线程每个都访问一个新的唯一(该线程)计数器实例,那么不需要同步?

【问题讨论】:

  • 为什么会出现混乱?是什么让您认为需要同步?
  • @Sotirios Delimanolis 我不知道是否从线程的角度单独操作相同对象的新创建实例 - 它们是单独操作的

标签: java multithreading


【解决方案1】:

我要引用你的link

[...] 但是,如果一个 Counter 对象被多个线程引用, 线程之间的干扰可能会阻止这种情况按预期发生。

当两个操作在不同的线程中运行,但作用于相同的数据时,会发生干扰。这意味着 这两个操作由多个步骤组成,并且 步骤重叠。

如果您的每个线程都有自己的Counter 实例,那么它们就不会作用于相同的数据。因此,没有干扰,不需要同步。

【讨论】:

    【解决方案2】:

    是的。如果您确定它们是唯一的实例,那么您不需要同步。仅当多个线程正在访问和修改 same 实例(共享状态)时,您才需要同步。

    【讨论】:

      猜你喜欢
      • 2011-02-12
      • 2022-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-14
      • 1970-01-01
      相关资源
      最近更新 更多