相当于 Java 中的 Go Channel
问题:
我需要高效读取数据来自多个阻塞队列,无需创建单独的读取器线程。 Java 中是否有与 Go 的 select/epoll 等效的机制?
答案:
考虑使用 JCSP 库,它提供了 Alternative 类。替代方案相当于 Go 的 select 语句。它使您能够创建单个消费者线程,该线程可以多路复用来自多个源通道的数据,而无需不断轮询。
JCSP 替代方案的优点:
使用示例:
以下 Java 代码演示了使用公平多路复用器JCSP:
import org.jcsp.lang.*; public class FairPlex implements CSProcess { private final AltingChannelInput[] in; private final ChannelOutput out; public FairPlex (final AltingChannelInput[] in, final ChannelOutput out) { this.in = in; this.out = out; } public void run () { final Alternative alt = new Alternative (in); while (true) { final int index = alt.fairSelect (); out.write (in[index].read ()); } } }
附加说明:
Maven 存储库中 JCSP 的当前版本是 1.1-rc5,与 JCSP 网站上的说明相反。
以上是Java 是否有相当于 Go 的 select 来高效地从多个阻塞队列中读取?的详细内容。更多信息请关注PHP中文网其他相关文章!