// Datei: Pipeline.java
// Datum: 05.11.2018
// Autor: Brecht
// Thema: Prozesslokale Inter-Thread-Kommunikation mit einer
// Pipeline. Benutzt werden die Klassen
// * PipedWriter und
// * PipedReader.
// Der main-Thread richtet die Pipeline mit einer Lese-
// und einer Schreibseite ein und startet dann zwei
// Threads, von denen einer, der Schreiber genannt wird,
// einen String (Hallo) in die Pipeline schreibt und der
// andere, der als Leser bezeichnet wird, ihn aus der
// Pipeline liest und ausgibt.
// -------------------------------------------------------------
import java.io.*;
class Pipeline {
public static void main(String[] args) {
// Pipeline einrichten
// -------------------------------------------------------
PipedReader pr = new PipedReader();
PipedWriter pw = new PipedWriter();
try { pr.connect(pw); }
catch(Exception e) {
System.out.println("Work: connect-Error");
System.exit(0);
}
// Die beiden Threads bilden und starten
// ----------------------------------------------------------
Schreiber sch = new Schreiber(pw);
Leser les = new Leser(pr);
sch.start();
les.start();
}
}
// ===========================================================
class Schreiber extends Thread {
String nachricht = "Hallo";
BufferedWriter bw = null;
Schreiber(PipedWriter b) { this.bw = new BufferedWriter(b); }
public void run() {
System.out.println("Schreiber: schreibe in die Pipe");
System.out.println("Schreiber: Text->" + nachricht);
try {
bw.write(nachricht); // In die Pipe schreiben
bw.newLine(); // readLine() ermöglichen
bw.flush(); // Puffer leeren
}
catch(Exception e) {
System.out.println("Schreiber: write-error");
System.exit(0);
}
}
}
// ============================================================
class Leser extends Thread {
BufferedReader br = null;
String s = null;
Leser(PipedReader a) { this.br = new BufferedReader(a); }
public void run() {
System.out.println("Leser: lese aus der Pipe");
try { s = br.readLine(); }
catch(Exception e) {
System.out.println("Leser: read-error");
System.exit(0);
}
System.out.println("Leser: habe gelesen->" + s);
}
}