Java中哪些情况需要同步方法访问?

在什么情况下需要同步对实例成员的访问?我知道对类的静态成员的访问总是需要同步 - 因为它们在类的所有对象实例之间共享.

In what cases is it necessary to synchronize access to instance members? I understand that access to static members of a class always needs to be synchronized- because they are shared across all object instances of the class.

我的问题是,如果我不同步实例成员,我什么时候会出错?

My question is when would I be incorrect if I do not synchronize instance members?

例如,如果我的班级是

public class MyClass {
    private int instanceVar = 0;

    public setInstanceVar()
    {
        instanceVar++;
    }

    public getInstanceVar()
    {
        return instanceVar;
    }
}

在什么情况下(使用类MyClass)我需要有方法:public synchronized setInstanceVar()公共同步 getInstanceVar() ?

in what cases (of usage of the class MyClass) would I need to have methods: public synchronized setInstanceVar() and public synchronized getInstanceVar() ?

提前感谢您的回答.

推荐答案

这取决于你是否希望你的类是线程安全的.大多数类不应该是线程安全的(为简单起见),在这种情况下您不需要同步.如果您需要它是线程安全的,您应该同步访问或使变量可变.(它避免了其他线程获取陈旧"数据.)

It depends on whether you want your class to be thread-safe. Most classes shouldn't be thread-safe (for simplicity) in which case you don't need synchronization. If you need it to be thread-safe, you should synchronize access or make the variable volatile. (It avoids other threads getting "stale" data.)

相关文章