Äquivalent von Go Channel in Java
Frage:
Ich muss Daten effizient lesen aus mehreren Blockierungswarteschlangen, ohne separate Leserthreads zu erstellen. Gibt es einen äquivalenten Mechanismus zu Gos select/epoll in Java?
Antwort:
Erwägen Sie die Verwendung der JCSP-Bibliothek, die die Alternative-Klasse bereitstellt. Alternative ist vergleichbar mit der Select-Anweisung von Go. Sie können damit einen einzelnen Verbraucherthread erstellen, der Daten aus mehreren Quellkanälen multiplexen kann, ohne dass eine ständige Abfrage erforderlich ist.
Vorteile der JCSP-Alternative:
Anwendungsbeispiel:
Der folgende Java-Code demonstriert die Verwendung eines fairen Multiplexers 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 ()); } } }
Zusätzlicher Hinweis:
Die aktuelle Version von JCSP in den Maven-Repositories ist 1.1-rc5, im Gegensatz zu den Angaben auf der JCSP-Website.
Das obige ist der detaillierte Inhalt vonGibt es ein Java-Äquivalent zu Gos „select' zum effizienten Lesen aus mehreren Blockierungswarteschlangen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!