小编典典
为了更一般地解决这个问题…
请记住,在方法上使用同步实际上只是简写(假设类是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) {...}
}
}
(对于非静态方法,你希望使锁成为非静态字段)
2020-03-15