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