Java文档中写道:
对同一对象的两次同步方法调用不可能交错。
这对静态方法意味着什么?由于静态方法没有关联的对象,那么synchronized关键字会锁定类而不是对象吗?
发布于 2009-01-13 00:53:31
由于静态方法没有关联的对象,所以synchronized关键字会锁定类而不是对象吗?
是。:)
发布于 2009-01-13 02:58:42
只是为了给奥斯卡增加一点细节(简洁得令人愉悦!)回答,Java Language Specification的相关部分是8.4.3.6, 'synchronized Methods'
同步方法在执行之前获取一个监视器(§17.1)。对于类(静态)方法,使用与该方法的类的class对象相关联的监视器。对于一个实例方法,使用与此关联的监视器(调用该方法的对象)。
发布于 2009-01-13 11:02:44
你必须注意的一点(几个程序员通常会落入这个陷阱)是同步的静态方法和同步的非静态方法之间没有联系,即:
class A {
static synchronized f() {...}
synchronized g() {...}
}
Main:
A a = new A();
线程1:
A.f();
线程2:
a.g();
f()和g()彼此不同步,因此可以完全并发执行。
https://stackoverflow.com/questions/437620
复制相似问题