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