线程安全-同步容器(同步容器不一定就是线程安全的)

ArrayList是线程不安全的,用Vector、Stack代替,
但是,Vector不一定就是安全的,若使用forEach或者Iterator遍历集合的时候做更新操作,会引发异常,而使用for循环则不会;

package com.concurrent.example;

import java.util.Iterator;
import java.util.Vector;

public class VectorExample {

    //抛出ConcurrentModificationException
    public static void test1(Vector<Integer> vector) {//forEach

        for (Integer integer : vector) {
            if (integer.equals(3)) {
                vector.remove(integer);
            }
        }
    }

    //抛出ConcurrentModificationException
    public static void test2(Vector<Integer> vector) {//iterator

        Iterator<Integer> iterator = vector.iterator();
        while(iterator.hasNext()) {
            Integer integer = iterator.next();
            vector.remove(integer);
        }
    }
    //success
    public static void test3(Vector<Integer> vector) {

        for(int i=0;i<vector.size();i++) {
            if (vector.equals(3)) {
                vector.remove(i);
            }

        }
    }


    public static void main(String[] args) {
        Vector<Integer> vector = new Vector<Integer>();
        vector.add(1);
        vector.add(2);
        vector.add(3);
        test3(vector);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值