假设我有一个具有静态成员变量的类。该类中存在两个同步方法static和instance,这两个方法都试图修改静态成员变量的值。第一个线程锁定该类的对象,因此第一个线程可以访问静态同步和实例同步方法。第二个线程具有类级别锁定,因此它只能访问静态同步方法。在这种情况下,如何实现线程安全。
答案 0 :(得分:1)
向实例方法添加额外的synchronized
块,在类对象上同步,或使用其他锁对象。以下清单显示了前者:
class Foo {
private static Set<String> state = new HashSet<>();
public static synchronized void bar(String item) {
state.add(item);
}
public /* synchronized */ baz(String item) {
synchronized (Foo.class) {
state.add(item);
}
}
}