我在某处读到以下代码片段在同步代码方面是等效的:
public synchronized void printMsg() {
System.out.println("synchronized");
}
public void printMsg() {
synchronized(this) {
System.out.println("synchronized");
}
}
据我所知,当线程访问对象上的同步方法时,其非同步方法不会被锁定,即其他线程可以使用相同的实例访问它们。
观察第二个片段,我的印象是,由于代码是同步的this
,因此访问该代码的线程会获取对象上的锁。
我的问题是,当 ThraedprintMsg()
使用第二个代码片段维护执行方法的锁时,其他线程是否可以访问其他类方法?
如果不是,则上述方法并不完全相同。什么是真的?