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)。
我这样理解有什么问题吗?
那个例子是为了分析局部变量可以挪到synchronized之外,我加了点代码
了解,谢谢老师
Sign in to make a reply
不惑之年
请问下大家和廖老师,为什么最后这个例子中的 set 方法是线程安全的呢,如果一个线程 set(xx, 1), 另一个线程 set(xx, 2) ,x,y 的值被修改后的情况可能有 (10,20),(10,10),(20,10),(20,20)。
我这样理解有什么问题吗?