Newsgroup: it.comp.java
Titolo: Blocco Thread di lettura InputStream

un Thread mi lancia la letttura di un inputstream:
BufferedReader dis = new BufferedReader (  new InputStreamReader  (
dati.openStream() )  );
  .....
  dis.close();
Se volessi bloccare il download istantaneamente come dovrei procedere?...
Non ci ho ancora provato, sicurmente ci arrivero' da solo...  ma se qualcuno
volesse evitarmi test e ricerche mi farebbe un piacere :)
Grazie in ogni caso.
Oxy

 ha scritto nel messaggio
news:lErD9.9217$2B1.2...@twister2.libero.it...


 }
Io uso :  runner.stop();  se non sbaglio e' deprecato... ma questo e' un
dettaglio a  cui non bado..  in ogni caso ad ogni versione Java devo rifare
molte cose, con grandi salti mortali per rimanere compatibile MS-AWT ( 99.9%
degli utenti web )  Per l'uso che ne faccio va benissimo e' super
collaudato, mai avuto un problema...  potrei calcolarne l'uso tra le 20000
e le 60000 volte al giorno:)... con tutte le versioni (anche la 1.4.1) ...
ma mi chidevo se boccando il Thread che lancia la funzione di lettura dati,
si bloccherebbe anche il flusso input?... o se piuttosto dovrei chiudere il
flusso?... mah... Faccio prima a provare:)
Grazie cmq :)

 while ((line = dis.readLine()) != null) {
     if(BstopRunner ) break;
    ....
    ....
    ....
  }
dis.close();
Ecco , cosi semplice e funzionale!... Non e' immediato ma e' molto soft...
semplicemente esce dalla lettura e fa quello che avrebbe fatto alla fine...
Pensi che toricamente potrebbe dare problemi?... Magari di  memoria buffer o
roba simile?
Ciao:)

 ha scritto nel messaggio
news:fWuD9.10231$3l.2...@twister1.libero.it...

Una nota di stile (ma soprattutto di "semantica dei linguaggi").
Trasforma il codice cosi'
while (!BstopRunner && (line = dis.readLine()) != null) {
     ....
  }
 dis.close();
..evita di usare costrutti tipo break, ne aumenta in genere la leggibilita'
ma soprattutto la correttezza formale e si semplifica il 'calcolo' della
semantica del programma!
Ciao ;-)
Ah: l'uso di Thread.stop(), come puoi vedere anche dalla documentazione
della SUN, potrebbe lasciare alcuni monitor e dati in uno stato non
consistente. Anche se tu non hai mai rilevato problemi questo metodo e'
inerentemente "unsafe", ti consiglio di evitarlo!
Ciao

 ha scritto nel messaggio
news:6IpE9.20341$2B1.5...@twister2.libero.it...

..premetto che ignoro molti dettagli ;-)  Per i dettagli ti rimando alla
documentazione della SUN
Quando si lancia un Thread, il Thread va a modificare dei dati (es.
descrittore dello stato del Thread o cose del genere), che appartengono a
strutture comuni anche ad altri Thread. Per gestire la concorrenza su questi
dati il tutto viene inserito in "transazioni" (volendo usare un termine
preso in prestito dalla teoria dei DB), implementate attraverso monitor.
Queste transazioni permettono di far passare i dati da uno stato consistente
ad un altro. Durante e all'interno della transazione i dati potrebbero anche
non essere consistenti se confrontati con il resto della struttura a cui
appartengono ma non e' importante in quanto (semplificando parecchio), non
sono visibili agli altri Thread che condividono la struttura.
Il Thread.stop() distrugge il Thread e la transazione da esso eseguita ma
non ripristina i dati nello stato che avevano prima della transazione:
questi dati potrebbero quindi andare a fare dei casini.
Ti ripeto che non conosco tutti i dettagli ma il succo del problema e'
questo.
Ciao

 questo.
non e' che abbia capito molto...  ma ho capito che devo trovare un altro
modo per terminarlo.
Grazie 1000:)
Oxy