如何并行执行同步代码?

时间:2018-02-14 06:59:09

标签: java multithreading thread-safety synchronized

假设我有以下代码:

synchronized(someObject) {
  //do something
}

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

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

1 个答案:

答案 0 :(得分:2)

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

如果您需要阻止此操作,请同步doSomething()。如果它与您显示的代码不在同一个类中,则除了通过示例中的synchronized语句之外,您需要阻止它可访问。

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