由于 Java 的同步概念,我很困惑。
让我们假设以下类:
class MyClass {
public synchronized void foo() { //do something }
public void bar() {
synchronized(this) { //do something }
}
public void normal() { //do something }
}
据我所知,foo和bar方法的工作原理相同。
但是,在线程A进入bar方法并通过 同步实例后synchronized(this),任何线程都可以调用正常方法吗?
据我所知,有些线程不管调用方法都可以调用普通foo方法。但我不确定何时bar调用该方法,因为它同步了一个实例。
另外,让我们假设以下方法:
class StaticMyClass {
public static synchronized void fooStatic() { //do something }
publi static void barStatic() {
synchronized(StaticMyClass.class) { //do something }
}
public static void normalStatic() { //do something }
}
在这里,有同样的问题。线程 A 进入临界区后,即synchronized(StaticMyClass.class)或fooStatic方法,任何线程都可以调用normalStatic?
我认为,fooStatic和normalStatic可以独立调用,但barStatic并normalStatic不能。如果错了,为什么?
我感谢您的帮助。
慕丝7291255
不负相思意
largeQ
相关分类