Vector 源码解析

2019-03-19  本文已影响0人  GCYML

关于 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 的比较

感谢

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

Java 容器

Java 中的 synchronized

上一篇 下一篇

猜你喜欢

热点阅读