如何并行执行同步代码?
How to execute synchronized code parallelly?
假设我有以下代码:
synchronized(someObject) {
//do something
}
据我所知,如果someObject
不是final,在synchronized块中有一个线程的情况下,当它被重新分配另一个值时,可能会导致并行执行。
我的问题是,除了上述情况,还有其他方法可以同时在不同线程中执行同步代码吗?
如果方法 doSomething()
不是同步的,并且另一个线程直接调用它而不是通过您的 synchronized
语句,那么是的,您可以在同一代码中有两个线程。
如果您需要防止这种情况发生,请使 doSomething()
同步。如果它与您显示的代码不在同一 class 中,那么您需要防止它被访问,除非通过示例中的 synchronized
语句。
如果您可以保证它无法通过 synchronized
语句以外的任何其他方式访问(可调用,即私有),那么您是安全的,除非有人求助于反射(并且没有安全管理器策略设置为阻止它)。通过反射,恶意开发人员可以绕过保护并直接调用该方法。但是你可能不需要担心这个,你没有具体说明这是否是一个问题。
假设我有以下代码:
synchronized(someObject) {
//do something
}
据我所知,如果someObject
不是final,在synchronized块中有一个线程的情况下,当它被重新分配另一个值时,可能会导致并行执行。
我的问题是,除了上述情况,还有其他方法可以同时在不同线程中执行同步代码吗?
如果方法 doSomething()
不是同步的,并且另一个线程直接调用它而不是通过您的 synchronized
语句,那么是的,您可以在同一代码中有两个线程。
如果您需要防止这种情况发生,请使 doSomething()
同步。如果它与您显示的代码不在同一 class 中,那么您需要防止它被访问,除非通过示例中的 synchronized
语句。
如果您可以保证它无法通过 synchronized
语句以外的任何其他方式访问(可调用,即私有),那么您是安全的,除非有人求助于反射(并且没有安全管理器策略设置为阻止它)。通过反射,恶意开发人员可以绕过保护并直接调用该方法。但是你可能不需要担心这个,你没有具体说明这是否是一个问题。