如何并行执行同步代码?

How to execute synchronized code parallelly?

假设我有以下代码:

synchronized(someObject) {
  //do something
}

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

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

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

如果您需要防止这种情况发生,请使 doSomething() 同步。如果它与您显示的代码不在同一 class 中,那么您需要防止它被访问,除非通过示例中的 synchronized 语句。

如果您可以保证它无法通过 synchronized 语句以外的任何其他方式访问(可调用,即私有),那么您是安全的,除非有人求助于反射(并且没有安全管理器策略设置为阻止它)。通过反射,恶意开发人员可以绕过保护并直接调用该方法。但是你可能不需要担心这个,你没有具体说明这是否是一个问题。