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


问题内容

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

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

例如,如果我的课程是

public class MyClass {
    private int instanceVar = 0;

    public setInstanceVar()
    {
        instanceVar++;
    }

    public getInstanceVar()
    {
        return instanceVar;
    }
}

在什么情况下(使用该类MyClass),我 需要 使用以下方法: public synchronized setInstanceVar()
public synchronized getInstanceVar()

预先感谢您的回答。


问题答案:

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