我看了一个贴子讨论,很多人都说Vector是线程同步的,需要多线程的情况下用它。当然arrayList也可以支持多线程。我想问的是,多线程的情况下,如果自己有一个vector对象会被从个线程访问,自己直接对访问它的方法做同步不是更好么?
如果所有可能访问它的方法都做了线程同步,而vector的方法本身也做了同步,此时是不是多此一举了? 但如果有别的对象也需要多线程访问,方法都做了线程同步,就留一个vector对象不去管,程序看起来会不会很奇怪?

解决方案 »

  1.   

    现在更多使用 ArrayList,vector不被推荐使用了吧?
      

  2.   

    ArrayList和Vector 中有一个是同步的, 当初设计人员应该考虑到不同的使用场景的. 在所有方法上都用同步也不太可能.
      

  3.   

    1.Java有安全机制。
    2.线程跟同步没有必然联系。
    3.Vector中的同步会在你做非同步操作时抛出异常。
    4.lz你可以写你的同步,但是效率绝没有Vector原来的好。
      

  4.   

    Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的。
    Vector本身为了多线程访问,就已经做了同步的操作,例如锁操作。当线程再为了Vector做同步时,显得多此一举。如果多个线程对这个Vector的同步没做好,有可能出现死锁等问题。所以当多线程访问Vector时,无需再考虑同步的问题。
    对于你的3个问题,回答如下:
    1. 可以,但不是更好。
    2. 是。
    3. 不会。
      

  5.   

    1楼是对的,直接用ArrayList吧,现在很少看到Vector了,不推荐试用
      

  6.   

    vector是过时的东西了。如果要同步的容器的话,可以看看并发包的容器。
      

  7.   

    惭愧 学到现在 没用过vector
    一般都用arraylist
      

  8.   

    两个都有用吧。不过,现在确实用ArrayList多一些,在没有线程安全性的情况下。
    有线和安全性存在的情况用:Vector
      

  9.   

    程序取舍的问题:     要安全 速度慢
    如果你的程序没有多线程访问,用ArrayList就可以了,访问速度块;如果你的需要多线程访问,就使用 Vector ;人家提供的同步机制应该比我们自己写的好点啦,没有绝对啊
      

  10.   

    ConcurrentLinkedQueue这个才是多线程用的
      

  11.   

    基本上用用arraylist满足一般的需求了。
      

  12.   

    楼主,Vector是线程同步的,你觉得使用其他方式也可以进行同步控制,但是你得知道sun公司出品的基本类的代码都是大师级的人物所写,代码质量方法自然高人一筹咯,呵呵。
      

  13.   

    Vector 调用 iterator 方法产生的迭代器对象不是线程安全的,因此,Vector, Hashtable 等等这些已经做为遗留的集合而存在了。