我正在尝试创建一个程序,其中使用多个线程对整数列表进行排序,这些线程可以全部读取并在多个步骤中写入其特定部分。每个线程都是同一对象的实例,并与列表的同一部分上的其他线程一起使用。我的问题是每个线程都看不到其他线程对列表所做的更改,因此列表中的某些初始元素在途中丢失了。有没有办法刷新或更新列表,以便线程能够更改列表?
答案 0 :(得分:0)
如果您想确保所有线程都访问同一个List,请将其设为静态或共享变量。
如何使用Vector而不是List,Vector是线程安全的
如果多个线程同时访问ArrayList,那么我们必须在外部同步代码块,从而在结构上修改列表或简单地修改元素。结构修改意味着从列表中添加或删除元素。设置现有元素的值不是结构修改。
Collections.synchronizedList通常在创建列表时使用,以避免对列表进行任何意外的不同步访问。
答案 1 :(得分:-1)
使用Java8 parallel Streams怎么样?
List<Integer> sortedList = theList.parallelStream()
.sorted()
.collect(Collectors.toList());