Witam,
W jaki sposób zrealizować komunikację pomiędzy wątkami w Javie? Dokładnie chodzi mi o przekazywanie pewnych danych pomiędzy wątkami. Problem w tym że wątki te oprócz wymiany danych między sobą muszą też otrzymywać dane z procesu który je powołał.
0
0
public static void exercise5() {
System.out.println("\n--5--\n");
try {
PipedWriter pos = new PipedWriter();
PrintWriter pw = new PrintWriter(pos);
PipedReader pis = new PipedReader(pos);
Thread pipedProducer = new ProducerThread(pw);
Thread pipedConsumer = new ConsumerThread(pis);
pipedProducer.start();
pipedConsumer.start();
} catch (Exception e) {
e.printStackTrace();
}
}
class ProducerThread extends Thread {
private PrintWriter out;
private BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
public ProducerThread(PrintWriter out) {
this.out = out;
}
public void run() {
try {
String s;
while (!(s = in.readLine()).equals("END")) {
out.println(s);
}
in.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
class ConsumerThread extends Thread {
private BufferedReader br;
public ConsumerThread(PipedReader in) {
br = new BufferedReader(in);
}
public void run() {
try {
String s;
while ((s = br.readLine()) != null) {
if (s.equals("END")) {
break;
} else {
System.out.println(s);
}
}
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Może się przyda zadanie z zajęć. Jeden wątek przesyła tekst do drugiego, działają dopóki użytkownik nie wpisze END. Bez synchronizacji itp., ale zawsze to coś.
0
jakieś inne propozycje?
0
Do wyboru do koloru:
http://java.sun.com/javase/6/docs/api/java/util/concurrent/package-summary.html
Nie widzę problemu, aby wątki potomne komunikowały się z wątkiem, który je stworzył.
Wystarczy przekazać w konstruktorze wątkom potomnym jakąś strukturę, która umożliwia wymianę danych, np. ArrayBlockingQueue.