如果两个线程同时操作一个ArrayList对象
可能出现情况:
1.CPU 切换到Thread-0,调用add("abc")方法执行elementData[0] = "abc";
2.CPU 切换到Thread-1,调用add方法执行elementData[0] = "def",此时"abc"被覆盖,相当于没有添加到集合中
因此需要使用同步机制,Thread-0 和 Thread-1 使用的锁是this,this指向同一个ArrayList对象
实际开发:
利用Collections.synchronizedList();返回一个同步的集合,不会使用Vector
|
|