相當於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中文網其他相關文章!