Java 中的同步是通过在某个特定对象上获取监视器来完成的。因此,如果您这样做:
class TestClass {
SomeClass someVariable;
public void myMethod () {
synchronized (someVariable) {
...
}
}
public void myOtherMethod() {
synchronized (someVariable) {
...
}
}
}
然后,这两个块将随时通过执行2个不同的线程来保护,而不会被修改。基本上,据说这两个块是根据变量同步的。someVariable
someVariable
当你把方法放上去的时候,它的意思基本上和 相同,也就是说,在执行这个方法的对象上进行同步。synchronized
synchronized (this)
那是:
public synchronized void myMethod() {
...
}
表示与:
public void myMethod() {
synchronized (this) {
...
}
}
因此,为了回答您的问题 - 是的,线程将无法在不同的线程中同时调用这些方法,因为它们都持有对同一监视器(对象的监视器)的引用。this