资讯专栏INFORMATION COLUMN

java vector的多线程安全是否有用

NicolasHe / 3202人阅读

摘要:如有不对的地方,请多多指正的使用主要有如下两种场景所谓的多线程安全,只是针对单纯地调用某个方法它是有同步机制的。的多线程安全,在组合操作时不是线程安全的。

在网上搜了不少文章,发现有不少没讲清楚的,也有不少好文,本文希望更易懂地描述该问题。如有不对的地方,请多多指正~~

vector的使用主要有如下两种场景:
(1)vector所谓的多线程安全,只是针对单纯地调用某个方法它是有同步机制的。如add,多个线程都在对同一个容器add元素,vector能够保证最后总数是正确的,而ArrayList没有同步机制,就无法保证。
(2)vector的多线程安全,在组合操作时不是线程安全的。比如一个线程先调用vector的size方法得到有10个元素,再调用get(9)方法获取最后一个元素,而另一个线程调用remove(9)方法正好删除了这个元素,那第一个线程就会抛越界异常。

总结:
(1)在需要对容器进行组合操作时,vector不适用(需要自己用synchronized将组合操作进行同步);
(2)仅在上述第一种场景时,才需要使用vector

public class TestMultiThread {

private static Vector vec = new Vector();
private static List lst = new ArrayList();

public void f() {
    TestThread testThread1 = new TestThread();
    TestThread testThread2 = new TestThread();
    Thread thread1 = new Thread(testThread1);
    Thread thread2 = new Thread(testThread2);
    thread1.start();
    thread2.start();
}

public static void main(String[] args) {
    TestMultiThread testMultiThread = new TestMultiThread();
    testMultiThread.f();
    
    try {
        Thread.sleep(5000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    System.out.println("vec size is " + vec.size());
    System.out.println("lst size is " + lst.size());

}

private class TestThread implements Runnable {

    @Override
    public void run() {
        for (int i = 0; i < 1000; ++i) {
            vec.add(i);
            lst.add(i);
        }
    }
}

}

如上程序运行结果:
vec size is 2000
lst size is 1999

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/11254.html

相关文章

  • java vector的多线程安全是否有用

    摘要:如有不对的地方,请多多指正的使用主要有如下两种场景所谓的多线程安全,只是针对单纯地调用某个方法它是有同步机制的。的多线程安全,在组合操作时不是线程安全的。 在网上搜了不少文章,发现有不少没讲清楚的,也有不少好文,本文希望更易懂地描述该问题。如有不对的地方,请多多指正~~ vector的使用主要有如下两种场景:(1)vector所谓的多线程安全,只是针对单纯地调用某个方法它是有同步机制的...

    NervosNetwork 评论0 收藏0
  • 40道阿里巴巴JAVA研发岗多线程面试题详解,你能答出多少

    摘要:但是单核我们还是要应用多线程,就是为了防止阻塞。多线程可以防止这个问题,多条线程同时运行,哪怕一条线程的代码执行读取数据阻塞,也不会影响其它任务的执行。 1、多线程有什么用?一个可能在很多人看来很扯淡的一个问题:我会用多线程就好了,还管它有什么用?在我看来,这个回答更扯淡。所谓知其然知其所以然,会用只是知其然,为什么用才是知其所以然,只有达到知其然知其所以然的程度才可以说是把一个知识点...

    lpjustdoit 评论0 收藏0
  • 出场率比较高的一道多线程安全面试题

    摘要:程序正常运行,输出了预期容量的大小这是正常运行结果,未发生多线程安全问题,但这是不确定性的,不是每次都会达到正常预期的。另外,像等都有类似多线程安全问题,在多线程并发环境下避免使用这种集合。 这个问题是 Java 程序员面试经常会遇到的吧。 工作一两年的应该都知道 ArrayList 是线程不安全的,要使用线程安全的就使用 Vector,这也是各种 Java 面试宝典里面所提及的,可能...

    xiyang 评论0 收藏0
  • Java面试题

    摘要:近段时间在准备实习的面试,在网上看到一份面试题,就慢慢试着做,争取每天积累一点点。现在每天给自己在面试题编写的任务是题,有时候忙起来可能就没有时间写了,但是争取日更,即使当天没更也会在之后的更新补上。     近段时间在准备实习的面试,在网上看到一份面试题,就慢慢试着做,争取每天积累一点点。    暂时手头上的面试题只有一份,题量还是挺大的,有208题,所以可能讲的不是很详细,只是我自...

    OnlyMyRailgun 评论0 收藏0
  • 通过面试题,让我们来了解Collection

    摘要:说一说迭代器通过集合对象获取其对应的对象判断是否存在下一个元素取出该元素并将迭代器对象指向下一个元素取出元素的方式迭代器。对于使用容器者而言,具体的实现不重要,只要通过容器获取到该实现的迭代器的对象即可,也就是方法。 前言 欢迎关注微信公众号:Coder编程获取最新原创技术文章和相关免费学习资料,随时随地学习技术知识!** 本章主要介绍Collection集合相关知识,结合面试中会提到...

    HelKyle 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<