1是一中线程同步(有争议)的容器,底层也是使用数组来储存,不过很多方法都加了syconized实现同步,效率很低,不适合在并发容器,而是作为同步容器,它的数组长度是变大为原来1倍,而且它的长度还以减小。
但并非完全线程安全,因为同步方法内部是互斥安全的,但是方法与方法之间并发是互斥访问的。
private static Vector<Integer> vector=new Vector();
public static void main(String[] args) {
while(true){
for(int i=0;i<10;i++){
vector.add(i); //往vector中添加元素
}
Thread removeThread=new Thread(new Runnable() {
@Override
public void run() {
//获取vector的大小
for(int i=0;i<vector.size();i++){
//当前线程让出CPU,使例子中的错误更快出现
Thread.yield();
//移除第i个数据
vector.remove(i);
}
}
});
Thread printThread=new Thread(new Runnable() {
@Override
public void run() {
//获取vector的大小
for(int i=0;i<vector.size();i++){
//当前线程让出CPU,使例子中的错误更快出现
Thread.yield();
//获取第i个数据并打印
//如果此时vector大小为5,i=4时,时间片用完了,调用remove使得i=4的元素被删除,导致越界异常 System.out.println(vector.get(i));
}
}
});
removeThread.start();
printThread.start();
//避免同时产生过多线程
while(Thread.activeCount()>20);
}
}