Java 线程间共享数据的通道

Java 线程间共享数据的通道,java,guava,blockingqueue,Java,Guava,Blockingqueue,我有一个要求,我需要读取文本文件,然后将其转换并写入其他文件。我希望以并行方式执行此操作,就像一个线程用于读取,一个线程用于转换,另一个线程用于写入 现在,为了在线程之间共享数据,我需要一些通道,我想使用BlockingQueue来实现这一点,但如果可用的话,我想探索一些其他(更好的)替代方案 番石榴有一个EventBus,但不确定这是否适合要求。从性能的角度来看,还有哪些替代方案可用,哪一个是最好的除非变换步骤非常密集,否则这可能是浪费时间 这样想吧。你要什么 你要求的东西 获取传入的数据流

我有一个要求,我需要读取文本文件,然后将其转换并写入其他文件。我希望以并行方式执行此操作,就像一个线程用于读取,一个线程用于转换,另一个线程用于写入
现在,为了在线程之间共享数据,我需要一些通道,我想使用
BlockingQueue
来实现这一点,但如果可用的话,我想探索一些其他(更好的)替代方案

番石榴有一个
EventBus
,但不确定这是否适合要求。从性能的角度来看,还有哪些替代方案可用,哪一个是最好的

除非变换步骤非常密集,否则这可能是浪费时间

这样想吧。你要什么

你要求的东西

  • 获取传入的数据流
  • 将其复制到另一个线程
  • 将其作为传入数据流呈现给该线程
哪种数据结构最能代表步骤3的传入数据流?(提示:这是您开始使用的InputStream!)

前两个步骤增加了什么价值?“transform”线程从磁盘读取的速度与通过另一个线程从磁盘读取的速度一样快。在两者之间添加线程不会加快磁盘读取速度

你会考虑在

时添加另一个线程
  • 您的问题可以有效地划分为独立的工作(例如,每个线程处理一块文本)
  • 将问题分解成这些工作的成本明显小于添加额外线程并在它们之间进行协调的开销(虽然很小,但不是免费的!)
  • 这个问题需要比单个CPU提供更多的资源(一个线程可以让您访问更多的CPU资源,但在I/O吞吐量方面没有提供多少价值)

  • 转换的强度很小(因为它包括大量的验证、转换、过滤等),并且不能与reader联系在一起,因为它遵循一些特定的规则进行阅读。然后,您可能需要更好地描述您的问题,以获得有用的响应。我认为如上所述,这是一个太笼统的问题,无法提出具体的改进建议。