我刚刚发现它有一个 NIO 工具,即 Java NIO Pipe,它专为在线程之间传递数据而设计。与通过队列传递更传统的消息(例如 ArrayBlockingQueue)相比,使用此机制是否有任何优势?
最佳答案
通常,传递数据供另一个线程处理的最简单方法是使用 ExecutorService。这包装了一个队列和一个线程池(可以有一个线程)
当你有一个支持 NIO channel 的库时,你可以使用管道。如果您想在线程之间传递数据的 ByteBuffers,它也很有用。
否则使用 ArrayBlockingQueue 通常更简单/更快。
如果您想要一种更快的方式在线程之间交换数据,我建议您查看 Exchanger但是它不像 ArrayBlockingQueue 那样通用。
关于Java NIO 管道与阻塞队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7558273/