一直没感受到,他们到底给我带来什么利弊.拿List下面的两个子类作比较:ArrayList与Vector,其
中ArrayList是非线程安全,Vector是线程安全的.但什么时候用ArrayList,什么时候用Vector我真不清楚.
希望CSDN上的朋友给我一个好的答案,有例子举证就最好了.

解决方案 »

  1.   

    查看ArrayList和Vector的源码会发现,其实Vector跟ArrayList基本一样,只是把所有改变列表元素的方法和部分跟位置或变化有关系的查询方法加上了synchronized。可以这样理解:
    1、如果List不会被多线程并发访问,使用ArrayList就没有问题;
    2、如果有多线程并发访问List,可以使用Vector,也可以使用ArrayList,并且自己对可能出现并发冲突的地方自行做synchronized处理。
      

  2.   


    同意,不是在线程里用的话,就用arrayList,速度快
      

  3.   

    同一个ArrayList可以被多个用户(线程)同时访问
    而同一个vector,A线程在访问的时候,B线程不能访问而挂起,等A释放对vector的锁以后B再访问。
    所以ArrayList有可能出现这样的情况:线程A,B同时访问ArrayList C
    他们都读出C的第五个元素是1000(假设第五个元素是表示5仓库的库存),这时候A线程因为其他原因挂起了,而B还在执行那么B线程显示还有1000个存货,B根据他卖出的货量修改第五个元素为:1000-200=800.这时候A线程回来了,他也开始继续执行,他也卖出100个货物,他开始修改,结果他修改为1000-100=900.这时候就出现问题了,实际只有700货,显示的却是900而vector不会,A访问的时候显示1000,B再来访问就不能访问,当A修改完毕后,B才能访问,显示为800,这样就不会出现问题
      

  4.   

    直接从字面意思理解就可以了
    线程安全就是在多线程环境下也不会出现数据不一致,而非线程安全就有肯能出现数据不一致
    线程安全的类由于要确保线程安全增加了一定的开销,所以在单线程环境中效率没非线程安全的类效率高
    http://www.diybl.com/course/4_webprogram/jsp/jsp_js/20090304/157682.html
      

  5.   

    没感受是因为没有操作过哇你弄2个线程同时用你的arraylist 你试一下就会发现在灵界状态特别容易有问题哇然后你再搞下vector 你就不会再没感觉了哇
      

  6.   

    我是楼主:对于5楼与8楼的答案,我也非常认可,
    但我想说一句我的观点:在WEB项目开发中,我们需要同步的是操作数据库的那个方法,Vector同步确实没发现他
    存在的必要.
    试问我们除了做练习外,我还真没用到Vector做过数据同步.希望CSDN兄弟继续指点.
      

  7.   

    那是你没用到啊,比如我举个很简单的例子,你有1000种货物,用JList对外显示(C/S模式),每个client都可以修改,当你某段时间内修改很频繁的时候,你不可能,一改就直接修改数据库吧,那要发多少update语句啊。你当然是修改JList里的Vector啦,最后再把Vector统一再update进去。
    至于你说的WEB项目,如果你用hibernate,你也会要用啊,因为他里面有个状态不是叫持久态,修改Vector就修改数据库了。
      

  8.   

    ArrayList是线程安全的,Vector是非线程安全的。
    不过在做过的项目中,确实很少用到Vector,我还是在见到楼主的文章后才知道有这么回事。当然我做过的都是小项目。
      

  9.   

    楼上说反了吧,正确的说法应该是:
    ArrayList是非线程安全的,Vector是线程安全的。