如何使状态变量线程安全

时间:2014-05-30 17:51:37

标签: java multithreading

假设我有一个具有静态成员变量的类。该类中存在两个同步方法static和instance,这两个方法都试图修改静态成员变量的值。第一个线程锁定该类的对象,因此第一个线程可以访问静态同步和实例同步方法。第二个线程具有类级别锁定,因此它只能访问静态同步方法。在这种情况下,如何实现线程安全。

1 个答案:

答案 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);
        }
    }
}