Danken(科男)
Vector的大部分方法都具有同步能力
 
怎么说Vector不是线程安全的?

解决方案 »

  1.   

    我觉得这个问题应该这么看。对于JTable在进行显示的时候先会取得当前的行数,然后在取每一行的值。如果数据保存在一个Vector中,那么取行数就是vector.size(),而取得值的方法就是vector.get(i)。问题应该就处在这两个函数调用之间,如果有一个线程正好删除了vector中的一个元素那么肯定就会出现数组越界的问题。
      

  2.   

    Linyv(vv) 说得对,就是因为vector不是线程安全的。用Collections.synchronizedCollection(Collection c)会返回一个线程安全的。
      

  3.   

    Danken(科男) 其实用Collections.synchronizedXXXX返回的对象一样存在上面的问题。其实Vector同Collections.synchronizedList返回的对象的行为很相似。在一定程度上是线程同步的。但是上面的问题需要的是取长度以及紧跟着的取元素操作应该是个不可分割的操作才行。现在的集合库中还没有这种行为的类存在。