Java|面试官:请说一下Java同步容器( 二 )


因此为了解决同步容器的性能问题 , 在Java 1.5中提供了并发容器 , 位于java.util.concurrent目录下 , 并发容器的相关知识后续讲解 。
2)同步容器真的是安全的吗?
也有有人认为Vector中的方法都进行了同步处理 , 那么一定就是线程安全的 , 事实上这可不一定 。 看下面这段代码:
我们看到这段代码报错了:数组下标越界 。
也许有朋友会问:Vector是线程安全的 , 为什么还会报这个错?很简单 , 对于Vector , 虽然能保证每一个时刻只能有一个线程访问它 , 但是不排除这种可能:
当某个线程在某个时刻执行这句时:
假若此时vector的size方法返回的是10 , i的值为9
然后另外一个线程执行了这句:
将下标为9的元素删除了 。
那么通过get方法访问下标为9的元素肯定就会出问题了 。
因此为了保证线程安全 , 必须在方法调用端做额外的同步措施 , 如下面所示:
3) ConcurrentModificationException异常
在对Vector等容器并发地进行迭代修改时 , 会报ConcurrentModificationException异常 , 关于这个异常后续会讲解 , 但是在并发容器中不会出现这个问题 。
欢迎小伙伴们留言交流~~