🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.lenguajes.java
Article #25876

Re: interrumpir llamada bloqueante a readLine()

#25876
From: Xavier Martínez i Puig
Date: Mon, 01 Mar 1999 00:00
88 lines
2902 bytes
Este es un mensaje multipartes en formato MIME.
--------------FA658BC58EEBADD0276E6995
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: quoted-printable

Guillermo Rodriguez Garcia escribi=F3:

> Buenas;
>
> Tengo un thread en el que estoy leyendo datos de un socket utilizando
> un stream de la clase BufferedReader y con la funci=F3n readLine(), alg=
o
> tal que as=ED:
>
> try
> {
>     while (conectado)
>     {
>         // llamada bloqueante
>         data =3D inputStream.readLine();
>
>         // procesar los datos
>         ....
>     }
> }
> catch (Exception e)
> {
>     System.err.println("Conexi=F3n perdida. Abortando...");
> }
> finally
> {
>     inputStream.close();
>     outputStream.close();
>     socket.close();
> }
>
> Mi problema es que hay una situaci=F3n en la que estando el thread
> bloqueado en la llamada a readLine() esperando nuevos datos necesito
> sacarlo del bloqueo y matarlo, para lo cual he probado a hacer desde
> el otro thread:
>
> miThread.stop()
>
> que seg=FAn la documentaci=F3n genera una evento 'throwable' de tipo
> ThreadDeath, ejecuta el bloque finally y mata el thread, pero el
> problema es que todo esto no lo hace hasta que no retorna del
> readLine() y yo necesito interrumpir dicho readLine()
>
> =BFAlguna idea?
>

Prueba lo siguiente:
    Antes de hacer el readLine comprueba que el Stream de lectura tenga
datos (o lo que es lo mismo est=E9 preparado para leer). El siguiente c=F3=
digo
te podr=EDa valer:
    // ....
    // Cede el procesador a otro proceso, si el stream est=E1 vac=EDo
    while (!inputStream.ready()) this.yield();

    data =3D inputStream.readLine();

    // ....



--------------FA658BC58EEBADD0276E6995
Content-Type: text/x-vcard; charset=us-ascii;
 name="xavier03.vcf"
Content-Transfer-Encoding: 7bit
Content-Description: Tarjeta de Xavier Mart�nez i Puig
Content-Disposition: attachment;
 filename="xavier03.vcf"

begin:vcard 
n:Mart�nez i Puig;Xavier
tel;home:96.286.38.93
tel;work:96.286.04.66 (ODEC)
x-mozilla-html:TRUE
org:ODEC;Inform�tica
adr:;;C/ Jacinto Benavente, 17;Gandia;Valencia;46700;Espa�a
version:2.1
email;internet:xavier03@bbvnet.com
title:Ingenier Inform�tic
fn:Xavi
end:vcard

--------------FA658BC58EEBADD0276E6995--
Technical Details
Message-ID: <36DAC8BF.82D83506@bbvnet.com>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
References: <36dabcb8.9941681@noticias.iies.es>

Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII
X-Google-Thread: 1116f3,4d0d5f32aca12cac
X-Google-Attributes: gid1116f3,public
From: Xavier Martínez i Puig <xavier03@bbvnet.com>
Subject: Re: interrumpir llamada bloqueante a readLine()
Date: 1999/03/01
Message-ID: <36DAC8BF.82D83506@bbvnet.com>
X-Deja-AN: 450016156
References: <36dabcb8.9941681@noticias.iies.es>
X-Accept-Language: es
Content-Type: multipart/mixed; boundary="------------FA658BC58EEBADD0276E6995"
Organization: ODEC
Mime-Version: 1.0
Newsgroups: es.comp.lenguajes.java