Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HashMap中线程的PipedOutputStream_Java_Multithreading_Iostream - Fatal编程技术网

Java HashMap中线程的PipedOutputStream

Java HashMap中线程的PipedOutputStream,java,multithreading,iostream,Java,Multithreading,Iostream,我有几个线程在后台运行。它们确实共享一个公共HashMap。 有可能在那里安全地存储管道输出流吗 我有以下情况: 当第一个后台线程接收到特定事件时,它应该开始将文本数据从一个大文件读入缓冲区 应该以某种方式通知独立的第二个后台线程,然后在数据到达时从缓冲管道读取数据 因为所有线程都可以访问HashMap,所以可以在那里存储所有流吗 您可以使用ConcurrentHashMap。我认为在这里使用管道没有多大意义,因为操作系统将在您读取文件之前读取文件。HashMap不是同步的,因此您必须添加逻辑或

我有几个线程在后台运行。它们确实共享一个公共HashMap。 有可能在那里安全地存储管道输出流吗

我有以下情况:

当第一个后台线程接收到特定事件时,它应该开始将文本数据从一个大文件读入缓冲区

应该以某种方式通知独立的第二个后台线程,然后在数据到达时从缓冲管道读取数据


因为所有线程都可以访问HashMap,所以可以在那里存储所有流吗

您可以使用ConcurrentHashMap。我认为在这里使用管道没有多大意义,因为操作系统将在您读取文件之前读取文件。

HashMap不是同步的,因此您必须添加逻辑或使用同步的集合。至于流,因为您只能写入OutputStream,只能从InputStream读取,所以从一个线程写入和从另一个线程读取都不会有问题。

我不理解您最后的评论,我想从文件中逐行读取数据,然后从第一个线程写入管道,并读取到达的数据进行处理,从第二个线程中的管道。我知道这是您想要做的,但如果出于性能原因,您可能会失望,因为操作系统在您读取数据之前先读取数据,然后再将其添加到文件描述符缓冲区,这也是管道使用的,这也是您读取的。i、 你可能已经在复制操作系统为你做的事情了。这很有趣,谢谢。但我会在另一个阶段获得表现,我没有解释完整的流程,因为它对于这个问题并不重要。旧方法是从头到尾读取数据并将其写入另一个文件,然后才处理新文件。使用新方法,我跳过了临时文件。旧进程是否必须写入OutputStream?如何使其性能更好?是简化线程之间的交互。这在很大程度上取决于他们做什么以及你能改变多少。