线程安全java-集合/列表 List contacts=new Vector(); 收集。分类(联系人);

线程安全java-集合/列表 List contacts=new Vector(); 收集。分类(联系人);,java,list,sorting,vector,thread-safety,Java,List,Sorting,Vector,Thread Safety,好的,我知道向量是线程安全的,但是如果我做上面的操作,会有什么问题吗 vector是线程安全的 它的每个方法都是线程安全的。但是,Collections.sort将迭代向量,这不是一个原子操作。特别是,缔约国: 如果在创建迭代器后的任何时间以任何方式(迭代器自己的remove或add方法除外)修改向量的结构,迭代器将抛出ConcurrentModificationException 因此,如果向量在排序时被另一个线程修改,则会出现异常 如果有多个线程可以访问您的结构,则其他方法包括:制作防御副本

好的,我知道向量是线程安全的,但是如果我做上面的操作,会有什么问题吗

vector是线程安全的

它的每个方法都是线程安全的。但是,
Collections.sort
将迭代向量,这不是一个原子操作。特别是,缔约国:

如果在创建迭代器后的任何时间以任何方式(迭代器自己的remove或add方法除外)修改向量的结构,迭代器将抛出ConcurrentModificationException

因此,如果向量在排序时被另一个线程修改,则会出现异常

如果有多个线程可以访问您的结构,则其他方法包括:制作防御副本或使用并发结构,如CopyOnWriteArrayList

vector是线程安全的

它的每个方法都是线程安全的。但是,
Collections.sort
将迭代向量,这不是一个原子操作。特别是,缔约国:

如果在创建迭代器后的任何时间以任何方式(迭代器自己的remove或add方法除外)修改向量的结构,迭代器将抛出ConcurrentModificationException

因此,如果向量在排序时被另一个线程修改,则会出现异常


如果有多个线程可以访问您的结构,则其他方法包括:制作防御副本或使用并发结构,如CopyOnWriteArrayList。

您可以使用以下方法使此代码线程安全:

List<Integer> contacts = new Vector<Integer>();

Collections.sort(contacts);
List contacts=new Vector();
已同步(联系人){
收集。分类(联系人);
}

您可以使用以下方法使此代码线程安全:

List<Integer> contacts = new Vector<Integer>();

Collections.sort(contacts);
List contacts=new Vector();
已同步(联系人){
收集。分类(联系人);
}
使用Collections.sort(任意)是一件非常幼稚的事情

如果查看排序方法签名,您将看到它们都在列表上运行,而列表不能保证线程安全:

排序(列表)
使用Collections.sort(任何东西)进行排序(List,Comparator)是一件非常幼稚的事情

如果查看排序方法签名,您将看到它们都在列表上运行,而列表不能保证线程安全:

排序(列表)

排序(List,comparator)什么问题?线程安全意味着很多事情。我想你的意思是:List contacts=new Vector();Collections.sort(contacts);至于线程安全,除非您将联系人存储在局部变量之外,否则不必担心,因为只有一个线程可以访问它。为什么您认为该代码会有线程安全问题?为了使代码成为线程安全风险,您需要多个线程。如果您有第二个线程,并且它访问
联系人
d在排序过程中,是的。是的,对不起,我从来没有读过我键入的内容。是的,当然是在不同的线程中。什么问题?线程安全意味着很多事情。我想你的意思是:列表联系人=新向量();集合。排序(联系人);至于线程安全,除非您将联系人存储在局部变量之外,否则不必担心,因为只有一个线程可以访问它。为什么您认为该代码会有线程安全问题?为了使代码成为线程安全风险,您需要多个线程。如果您有第二个线程,并且它访问
联系人
d在排序过程中,是的。是的,对不起,我从来没有读过我键入的内容。是的,当然是在不同的线程中。有没有一种方法可以使集合线程安全或排序?简单的方法是制作一个副本并对副本排序。有没有一种方法可以使集合线程安全或排序?简单的方法是制作一个cop对副本进行编辑和排序。