如下所示的代码段:
List<String> list = new ArrayList<>();
public void addValue(int i) {
synchronized (list) {
list.add("list" + i);
}
}
我的问题是关键字synchronized
锁定的内容
当两个线程要求执行代码块时,将检查list
什么?
同样的问题是我同步this
但其字段仍可以更改。
答案 0 :(得分:0)
同步块被锁定。当代码运行时,线程不会锁定对象,而是 OBTAINS list
对象的锁定(这是对象头内的标记词),因此其他线程不能获得相同的锁。结果,块内的代码只能由一个线程同时执行。