Vector并非是绝对的线程安全类

众所周知,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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值