在Java中更新多线程共享的列表

在Java中更新多线程共享的列表,java,multithreading,Java,Multithreading,我试图创建一个程序,其中整数列表使用多个线程进行排序,所有线程都可以在多个步骤中读取和写入它的特定部分。每个线程都是同一对象的实例,并与列表中同一部分的另一个线程一起工作。我的问题是,每个线程都看不到另一个线程对列表所做的更改,因此列表中的一些初始元素在执行过程中丢失了。有没有一种方法可以刷新或更新列表,以便线程能够更改列表?使用Java8怎么样 List sortedList=List.parallelStream() .已排序() .collect(Collectors.toList());

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

使用Java8怎么样

List sortedList=List.parallelStream()
.已排序()
.collect(Collectors.toList());
  • 如果要确保所有线程都访问同一个列表,请将其设置为静态或共享变量

  • 使用向量而不是列表怎么样,向量是线程安全的

  • 如果多个线程同时访问一个ArrayList,那么我们必须从外部同步代码块,该代码块可以从结构上修改列表,也可以简单地修改元素。结构修改是指从列表中添加或删除元素。设置现有图元的值不是结构修改

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


    我使用的是数组,而不是ArrayList。我试着使列表保持静态,但它没有改变任何东西,向量也没有我想要使用的方法。我还需要做些什么才能让这个列表起作用,还是举个具体的例子?@orestrag97在你的问题中,你清楚地说你在使用“一个整数列表”,现在你说“我在使用数组而不是ArrayList。”-那是什么?数组还是列表?请相应地更新您的问题,以澄清这一点。
    List<Integer> sortedList = theList.parallelStream()
                                      .sorted()
                                      .collect(Collectors.toList());