Java并发,读取文件创建对象并存储它们

Java并发,读取文件创建对象并存储它们,java,file-io,concurrency,Java,File Io,Concurrency,我目前正在使用java.nio读取文件(使用files.readAllLines),然后每一行都被传递来创建一个对象[newobject(line)],对象被添加到一个集合中 每个文件的解析方式都不同,因此有3种类型的对象,其中2种被添加到映射中,当它们第三次添加到集合中并添加到前面两个映射中的变量时,应该首先执行这些操作[使用类似的方法: get(var).x.add(Object)]. 我真的不知道如何并发编码,并且很难找到与此类似的东西,但我认为可以使用并发来创建前两个集合,或者在所有三

我目前正在使用
java.nio
读取文件(使用
files.readAllLines
),然后每一行都被传递来创建一个对象[
newobject(line)]
,对象被添加到一个集合中

每个文件的解析方式都不同,因此有3种类型的对象,其中2种被添加到映射中,当它们第三次添加到集合中并添加到前面两个映射中的变量时,应该首先执行这些操作[使用类似的方法:

get(var).x.add(Object)].
我真的不知道如何并发编码,并且很难找到与此类似的东西,但我认为可以使用并发来创建前两个集合,或者在所有三个集合中使用它,并最后完成最后一批(或者让它等待,如果需要编辑的变量尚未设置,则稍后再进行)


任何帮助都将不胜感激,如果您需要我所寻找的任何澄清,请询问。

因此您有3个文件,其中2个文件将放入地图,最后一个文件用于添加地图的某些值,对吗


您可以为两个文件中的每个文件创建线程,并将数据放入映射。这里重要的一点是,您必须使用并发数据结构,如
ConcurrentHashMap
或synchronized map。

我将使用以下全局步骤并行执行此操作:

  • 创建特定大小的线程池:
    Executors.newFixedThreadPool(someSize)
  • 创建三个并发/同步集。每个对象类型一个:
    Collections.synchronizedSet(newhashset());
  • 适当时,使用线程池处理添加到同步集的所有文件
  • 处理完所有文件后,第一个列表/集合具有初始对象,然后循环最后一个集合,其中包含需要添加到前两个集合实例中的值。如果此列表非常大,则可以将其拆分为多个部分,也可以同时执行此操作

  • 同时执行文件操作通常不是一个好主意,因为它会导致磁盘浪费大量时间来回移动磁头。