部分方法的Spring和同步

ale*_*pro 2 java spring static multithreading synchronized

我有一个经理作为 Spring 有线 bean。我相信默认情况下为 spring 定义的每个 bean 都连接为单例。我在这个 bean 中有一些需要同步的方法。那我该怎么做——

void zzz() {
 synchronized (this) {
   ...
 }
}
Run Code Online (Sandbox Code Playgroud)

或者

void zzz() {
 synchronized (MyClass.class) {
   ...
 }
}
Run Code Online (Sandbox Code Playgroud)

?

nai*_*kus 5

两者的主要区别在于,在第一种情况下,类的实例作为监视器,第二种情况使用类作为监视器。

第一个可能是您的情况的方法,因为在不久的将来,如果您决定拥有多个类的实例,它们的方法将在相应的实例上同步。与使用类作为监视器相反,如果一个线程在一个实例上调用同步方法,则其他线程将无法调用同一类的任何实例上的方法(那些同步的)。