Äquivalent zum Go-Kanal in Java: Multiplexing von Quelldaten
Um die Situation zu bewältigen, in der mehrere BlockingQueues überwacht werden müssen, ohne jedoch mehrere Leser-Threads zu erstellen, Ein Mechanismus, der dem Kanal und der Auswahl von Go ähnelt, ist wertvoll. In Java bietet die JCSP-Bibliothek ein funktionales Äquivalent.
JCSP-Alternative: Ein Go-Select-Gegenstück
Die JCSP-Alternative entspricht der Select-Anweisung von Go. Es ermöglicht einem konsumierenden Thread, mehrere Eingabekanäle einzuschalten, ohne diese abfragen zu müssen. Dies gewährleistet ein effizientes Multiplexing der Quelldaten und vermeidet unnötige Schleifen, selbst wenn einige Warteschlangen keine Daten enthalten.
JCSP-Implementierung
Ein Beispiel für die Verwendung der JCSP-Alternative für faires Multiplexing von Eingaben Kanäle finden Sie unten:
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 ()); } } }
Deadlock Vermeidung
Ähnlich wie bei Go müssen Java-Programme, die Kanäle verwenden, sorgfältig entworfen werden, um Deadlocks zu vermeiden. Die formale Analyse der JCSP-Bibliothek validiert ihren Kanal und ihre alternative Implementierung und gewährleistet Zuverlässigkeit und Freiheit von Deadlocks.
Hinweis
Die neueste stabile Version von JCSP ist Version 1.1-rc5. nicht die auf der Website erwähnte Version.
Das obige ist der detaillierte Inhalt vonWie kann Java Daten aus mehreren Blockierungswarteschlangen effizient multiplexen, ähnlich wie Gos Channels und Select?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!