PDA

Visualizza la versione completa : [JAVA] Buffer con 2 thread


Lucked
30-11-2005, 15:36
ciao a tutti
guardate questo programma...ci sono 2 thread, un lettore e uno scrittore...il lettore Ŕ molto piu veloce..eppure come Ŕ possibile che non da segni di output quando viene eseguito e lo scrittore ha prodotto il suo output?


import java.io.*;

class Sender extends Thread {
private Writer out;
public Sender (Writer w) {out = w;}
public void run() {
for (char c = 'A'; c <= 'F'; c++)
try {
System.out.println("scrivi " + c);
out.write(c);
sleep(1000);
} catch (IOException e) {}
catch(InterruptedException e) {}
}
}

class Receiver extends Thread {
private Reader in;
public Receiver (Reader r) {in = r;}
public void run() {
try {
while (true) {
sleep(10);
System.out.println("leggi " + (char)in.read());
}
} catch(IOException e) {System.out.println("fine input");}
catch(InterruptedException e) {System.out.println("XXX");}
}
}

class Pipe {
public static void main(String[] args) {
PipedWriter out = new PipedWriter();
PipedReader in = null;
try {
in = new PipedReader(out);
} catch(IOException e) {}
new Receiver(in).start();
new Sender(out).start();

}
}

Lucked
30-11-2005, 15:38
il lettore viene eseguito 100 volte e non stampa nulla...non capisco come sia possibile...

anx721
30-11-2005, 22:41
a me da il seguente output:

scrivi A
leggi A
scrivi B
leggi B
scrivi C
leggi C
scrivi D
leggi D
scrivi E
leggi E
scrivi F
leggi F
fine input
Premere un tasto per continuare . . .

Lucked
30-11-2005, 22:50
si, anche a me. Volevo sapere come mai il receiver non viene eseguito varie volte...ma forse dipende proprio da come Ŕ stata concepita la read...piuttosto che dai thread..non me ne intendo molto di stream, anche se Ŕ un bell'argomento

anx721
01-12-2005, 13:43
in che senso non viene eseguito varie volte?

Lucked
01-12-2005, 13:52
voglio dire che il Thread Receiver, viene costantemente messo in pausa e eseguito varie volte quando il Sender Ŕ fermo...anche provando a mettere un altra System.out.println in Receiver...non la esegue...Ŕ come se dopo la prima stampa rimanesse bloccato...se ne conosci il motivo bene, se no non importa, era una curiositÓ

anx721
01-12-2005, 16:19
il receiver dopo ogni lettura aspetta che il sender invii qualcosa da leggere, per questo si blocca.

Lucked
01-12-2005, 20:33
Yess....thks! :ciauz:

Loading