美文网首页
Vector 源码解析

Vector 源码解析

作者: GCYML | 来源:发表于2019-03-19 11:25 被阅读0次

关于 synchronized

在 Java 中 synchronized 可用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这段代码。

而 synchronized 底层是通过使用对象的监视器锁(monitor)来确保同一时刻只有一个线程执行被修饰的方法或者代码块。可以用锁和钥匙来解释,被 synchronized 修饰的方法或者代码块是一把锁,这把锁是归对象所有的,当一个线程需要执行这些方法或者代码块的时候,锁就被钥匙插上了,所以其他线程就不能执行这些方法或者代码块。(实际情况还要更加复杂,这里只是便于理解,实际上 synchronized 的锁是可重入的)

Vector 同步

它的实现与 ArrayList 类似,但是使用了 synchronized 进行同步。

public synchronized boolean add(E e) {
    modCount++;
    ensureCapacityHelper(elementCount + 1);
    elementData[elementCount++] = e;
    return true;
}
public synchronized E get(int index) {
    if (index>= elementCount)
        throw new ArrayIndexOutOfBoundsException(index);

    return elementData(index);
}

与 ArrayList 的比较

  • Vector 是同步的,因此开销就比 ArrayList 要大,访问速度更慢。最好使用 ArrayList 而不是 Vector,因为同步操作完全可以由程序员自己来控制;
  • Vector 每次扩容请求其大小的 2 倍空间,而 ArrayList 是 1.5 倍。

感谢

本文所有内容均节选自下面两篇文章,感谢分享。

Java 容器

Java 中的 synchronized

相关文章

  • Vector及LinkedList源码解析

    1、本文主要内容 Vector及LinkedList介绍 Vector源码解析 LinkedList源码解析 总结...

  • 一起做做JAVA面试题--ArrayList、LinkedLis

    ArrayList、LinkedList 和 Vector源码解析 ArrayList查看源码 ArrayList...

  • Vector源码解析

    1. 简介 Vector跟ArrayList一样是一个基于数组实现的List,只不过Vector是线程安全的,在可...

  • Vector源码解析

    Vector简介 Vector也是基于数组实现的,是一个动态数组,其容量能自动增长。 Vector是JDK1.0引...

  • Vector 源码解析

    关于 synchronized 在 Java 中 synchronized 可用来给对象和方法或者代码块加锁,当它...

  • STL源码解析(vector)

    vector的数据结构 vector 有 size(), capacity(), resize(), reserv...

  • 集合源码解析之Vector

    概述 在前两章我们已经学习了List常用的两个实现ArrayList、LinkedList,下面我们来学习下Vec...

  • Stack&Vector源码解析

    1 Stack源码 前面我们已经接触过几种数据结构了,有数组、链表、Hash表、红黑树(二叉查询树),今天再来看另...

  • STL容器(2)-deque类

    STL源码解析(2)-deque类 deque是类似于vector的动态数组,与之不同的是支持在头部的插入、删除操...

  • java.util.Vector源码解析

    所属包 继承与实现关系 准备知识 Vector集合实际上是实现了动态数组的方式,是可以随着向量元素的增加可以动态增...

网友评论

      本文标题:Vector 源码解析

      本文链接:https://www.haomeiwen.com/subject/ythgmqtx.html