为什么同步对象仍然可以被操纵

时间:2016-07-15 02:25:48

标签: multithreading synchronized

如下所示的代码段:

List<String> list = new ArrayList<>();

public void addValue(int i) {
    synchronized (list) {
        list.add("list" + i);
    }
}

我的问题是关键字synchronized锁定的内容 当两个线程要求执行代码块时,将检查list什么? 同样的问题是我同步this但其字段仍可以更改。

1 个答案:

答案 0 :(得分:0)

同步块被锁定。当代码运行时,线程不会锁定对象,而是 OBTAINS list对象的锁定(这是对象头内的标记词),因此其他线程不能获得相同的锁。结果,块内的代码只能由一个线程同时执行。