代码之家  ›  专栏  ›  技术社区  ›  xingbin

如何并行执行同步代码?

  •  0
  • xingbin  · 技术社区  · 8 年前

    假设我有以下代码:

    synchronized(someObject) {
      //do something
    }
    

    据我所知,如果 someObject 不是final,当它被重新分配另一个值,而同步块中有一个线程时,可能会导致并行执行。

    我的问题是,除了上述情况之外,还有其他方法可以同时在不同线程中执行同步代码吗?

    1 回复  |  直到 8 年前
        1
  •  2
  •   Jim Garrison    8 年前

    如果方法 doSomething() 是不同步的,另一个线程直接调用它,而不是通过 synchronized 语句,那么是的,您可以在同一代码中有两个线程。

    如果需要防止这种情况,请 doSomething() 已同步。如果它与显示的代码不在同一个类中,则需要防止通过 已同步 示例中的语句。

    如果您可以保证除通过 已同步 声明除非有人求助于反思,否则您是安全的(并且没有安全管理器策略来阻止它)。通过反射,恶意开发人员可以绕过保护,直接调用该方法。但您可能不需要担心这一点,您还没有指定这是否是一个问题。