1.测试代码
package com.wangzerui.list;
import java.util.Vector;
import java.util.concurrent.CountDownLatch;
public class VectorSafeTest {
/**
* 测试Vector线程安全安全
* @throws Exception
*/
public static void main(String[] args) throws Exception {
final CountDownLatch countDownLatch = new CountDownLatch(2); // 倒计时计数器
final Vector<Integer> vector = new Vector<Integer>();
Runnable runnable01 = new Runnable() {
@Override
public void run() {
for (int i = 1; i <= 1000; i++) {
vector.add(i);
}
countDownLatch.countDown();
}
};
Runnable runnable02 = new Runnable() {
@Override
public void run() {
for (int i = 1001; i <= 2000; i++) {
vector.add(i);
}
countDownLatch.countDown();
}
};
Thread thread01 = new Thread(runnable01);
thread01.start();
Thread thread02 = new Thread(runnable02);
thread02.start();
countDownLatch.await(); // 其他两个线程执行完,主线程才继续往下执行
for (Integer integer : vector) {
System.out.println(integer);
}
}
}
运行结果:没有像前一篇文章ArrayList出现越界异常
2.Vector线程安全,对源码进行分析,由于方法加了synchronized,所以线程是安全的。
public synchronized boolean add(E e) {
modCount++;
ensureCapacityHelper(elementCount + 1);
elementData[elementCount++] = e;
return true;
}