众所周知,Vector是一个线程安全的类,其在add()等操作上添加了synchronized关键字实现同步,但是并非是绝对的线程安全类.
当进行迭代遍历时,如果在另一个线程执行add(),remove()操作,仍然会有机率抛出异常ConcurrentModificationException.
Java版本:9.0.1
package com.util;
import java.util.Vector;
/**
* @program: javabase
* @description: Vector并非是绝对的线程安全类.
* @author: Mr.lgj
* @version:
* @See:
* @create: 2018-07-18 17:23
**/
public class VectorThreadSafeDemo extends Thread {
static Vector<Integer> vector = new Vector<Integer>();
public static void main(String[] args) {
VectorThreadSafeDemo thread = new VectorThreadSafeDemo();
thread.start();
for (int i = 0 ; i < 100 ;i++){
vector.add(i);
}
//foreach在集合中使用本质是使用迭代器iterator实现
for (Integer data:vector){
System.out.print(data +" ");
}
}
@Override
public void run() {
super.run();
System.out.println("执行线程.......");
for (int i = 0 ; i < 100 ;i++){
vector.add(i);
}
}
}
输出
执行线程.......
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Exception in thread "main" java.util.ConcurrentModificationException
at java.base/java.util.Vector$Itr.checkForComodification(Vector.java:1295)
at java.base/java.util.Vector$Itr.next(Vector.java:1251)
at com.util.VectorThreadSafeDemo.main(VectorThreadSafeDemo.java:25)