同步方法

and*_*ndy 10 java concurrency multithreading

如果我有一个同步的公共方法和私有方法:

public synchronized void doSomething() {
    doSomethingElse()
}

private void doSomethingElse() {
}
Run Code Online (Sandbox Code Playgroud)

我需要同步私有方法吗?

NPE*_*NPE 15

这取决于:

  • 如果doSomethingElse可以安全地同时呼叫,那么你不需要synchronized.
  • 如果不是,那么答案取决于它的调用位置:
    • 如果它只是从其他synchronized方法调用,那么它不需要synchronized(但标记它不会造成伤害);
    • 如果可以从不是synchronized自己的方法调用它,那么它必须synchronized.


J T*_*J T 5

否:如果doSomethingElse()调用的唯一方法是通过另一个同步的方法。

可能是:如果您doSomethingElse()以其他方式调用,通过未同步的方法,您需要保护它免受并发访问。


Nat*_*eat 5

这取决于你在做什么.您需要确保串行访问doSomethingElse()吗?

如果是这样,并且唯一的调用doSomethingElse()doSomething(),那么不,你不需要同步.但是如果其他方法可以调用doSomethingElse(),那么是的,你也应该同步它.


Ted*_*opp 2

从同步方法(或块内synchronized)调用的任何方法都会在同步时运行。如果仅从同步方法调用私有方法,则无需单独同步该私有方法。