更新从Java多个线程共享的列表

时间:2016-11-04 21:23:25

标签: java multithreading

我正在尝试创建一个程序,其中使用多个线程对整数列表进行排序,这些线程可以全部读取并在多个步骤中写入其特定部分。每个线程都是同一对象的实例,并与列表的同一部分上的其他线程一起使用。我的问题是每个线程都看不到其他线程对列表所做的更改,因此列表中的某些初始元素在途中丢失了。有没有办法刷新或更新列表,以便线程能够更改列表?

2 个答案:

答案 0 :(得分:0)

  1. 如果您想确保所有线程都访问同一个List,请将其设为静态或共享变量。

  2. 如何使用Vector而不是List,Vector是线程安全的

  3. 如果多个线程同时访问ArrayList,那么我们必须在外部同步代码块,从而在结构上修改列表或简单地修改元素。结构修改意味着从列表中添加或删除元素。设置现有元素的值不是结构修改。

    Collections.synchronizedList通常在创建列表时使用,以避免对列表进行任何意外的不同步访问。

    Link to reference

答案 1 :(得分:-1)

使用Java8 parallel Streams怎么样?

List<Integer> sortedList = theList.parallelStream()
                                  .sorted()
                                  .collect(Collectors.toList());