Discuss / Java / 最后一个例子疑问

最后一个例子疑问

Topic source

不惑之年

#1 Created at ... [Delete] [Delete and Lock User]
class Status {
    List<String> names;
    int x;
    int y;
    void set(String[] names, int n) {
        List<String> ns = List.of(names);
        this.names = ns;
        int step = n * 10;
        this.x += step;
        this.y += step;
    }
    StatusRecord get() {
        return new StatusRecord(this.names, this.x, this.y);
    }
}

请问下大家和廖老师,为什么最后这个例子中的 set 方法是线程安全的呢,如果一个线程 set(xx, 1), 另一个线程 set(xx, 2)  ,x,y 的值被修改后的情况可能有  (10,20),(10,10),(20,10),(20,20)。

我这样理解有什么问题吗?

廖雪峰

#2 Created at ... [Delete] [Delete and Lock User]

那个例子是为了分析局部变量可以挪到synchronized之外,我加了点代码

不惑之年

#3 Created at ... [Delete] [Delete and Lock User]

了解,谢谢老师


  • 1

Reply