2016-11-04 47 views
0

我想创建一个程序,其中整数列表使用多个线程进行排序,多个线程可以在多个步骤中读取并写入特定部分。每个线程都是同一对象的一个​​实例,并且与列表的同一部分上的其他线程一起工作。我的问题是每个线程无法看到其他线程对列表所做的更改,因此列表中的某些初始元素会丢失。有没有办法刷新或更新列表,以便线程能够拥有更改的列表?正在更新从多个线程共享的列表int Java

+0

https://docs.oracle.com/javase/tutorial/essential/concurrency/sync.html – shmosel

回答

-1

刚刚使用Java8 parallel Streams怎么办?

List<Integer> sortedList = theList.parallelStream() 
            .sorted() 
            .collect(Collectors.toList()); 
0
  1. 如果你想确保所有线程访问相同的列表,使静态的或共享变量。

  2. 如何使用,而不是列出一个Vector,Vector是线程安全的

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

Collections.synchronizedList通常在创建列表时使用,以避免意外的非同步访问列表。

Link to reference

+0

我使用的阵列,而不是ArrayList的。我试着让列表成为静态的,但它并没有改变任何东西,Vector也没有我想要使用的方法。还有什么我应该做的清单工作或一个具体的例子? – orestrag97

+0

@ orestrag97在你的问题中,你明确指出你正在使用_“整数列表”_,现在你说_“我正在使用一个数组而不是ArrayList。”_ - 那它是什么?数组或列表?并且请相应地更新您的问题以说清楚。 –