当两个线程同时使用不同的实例调用静态同步方法时会发生什么?是否可以?对象锁用于非静态同步方法,但什么类型的锁用于静态同步方法?
问问题
2418 次
4 回答
6
这与在实现该方法的对象上同步是一样Class
的,所以是的,这是可能的,是的,该机制有效地忽略了调用该方法的实例:
class Foo {
private static synchronized doSomething() {
// Synchronized code
}
}
是写这个的捷径:
class Foo {
private static doSomething() {
synchronized(Foo.class) {
// Synchronized code
}
}
}
于 2012-09-19T10:10:05.300 回答
6
有可能的。
线程锁定Class
类的对象,例如 on MyClass.class
。
8.4.3.6。同步方法
同步方法在执行之前获取监视器(第 17.1 节)。
对于类(静态)方法,使用与方法类的 Class 对象关联的监视器。
于 2012-09-19T10:10:11.140 回答
0
静态同步方法对 java.lang.Class 类型的实例使用锁。也就是说,每个可访问类在运行时由一个 Class 类型的对象表示,并且该对象由静态同步方法使用。
于 2012-09-19T10:11:41.300 回答
0
使用静态锁时,对象会被忽略。锁是在类而不是对象上获得的。
于 2017-08-20T07:36:33.363 回答