更一般地解决这个问题......
请记住,使用synchronized on方法实际上只是简写(假设类是SomeClass):
synchronized static void foo() {
...
}
是相同的
static void foo() {
synchronized(SomeClass.class) {
...
}
}
和
synchronized void foo() {
...
}
是相同的
void foo() {
synchronized(this) {
...
}
}
您可以使用任何对象作为锁。 如果要锁定静态方法的子集,则可以
class SomeClass {
private static final Object LOCK_1 = new Object() {};
private static final Object LOCK_2 = new Object() {};
static void foo() {
synchronized(LOCK_1) {...}
}
static void fee() {
synchronized(LOCK_1) {...}
}
static void fie() {
synchronized(LOCK_2) {...}
}
static void fo() {
synchronized(LOCK_2) {...}
}
}
(对于非静态方法,您可能希望将锁定为非静态字段)