Article View: es.comp.lenguajes.java
Article #17760Re: Control de Threads
From: Juan Gonzalo de Silva Medina
Date: Thu, 26 Oct 2000 23:43
Date: Thu, 26 Oct 2000 23:43
73 lines
3916 bytes
3916 bytes
Jorge Rey Mart�nez-Sapi�a escribi�:
>
> Tengo un applet que lanza varios threads para obtener informaci�n de
> distintas fuentes, el applet debe detenerse hasta que los threads
> acaban, cuando estos acaban debe seguir con su ejecuci�n para mostrar
> los resultados.
> Esto lo hago mediante la sentencia thread.join() para cada uno de
> los threads.
> Una soluci�n que me habian dado pero que no me funciona era:
> Ejecutar en el applet wait() y en cada uno de los threads ejecutar:
> thread.notify() con esa instrucci�n se despierta el applet despues del
> wait poner una instrucci�n que compruebe si todos los threads han
> acabado (thread.isAlive()) Si no han acabado todos volver al wait ().
> Esta soluci�n no me funciona �porque?
> Pero ahora tengo que hacer una cosa un poco distinta, lanzar todos
> los threads, esperar a que uno acabe y cuando acabe el primero,
> comprobar cual es el que acabo y si es uno en especial, matar al resto
> de los threads y mostrar la info obtenida del que acabo, si el que acaba
> es otro volver a esperar hasta que acaba el thread especial o acaban
> todos los threads del otro tipo. �Como puedo hacer esto?
Hummm....
A lo mejor te vale, no s�...
Por facilitar voy a suponer que conoces, a priori, el numero de threads
m�ximos a lanzar.
Lo primero es crear un Array de booleanos del tama�o igual al n�mero de
threads a disparar.
Instancias el Thread, pasandole la nueva posici�n que ocupa.
En el array marcas que ese thread esta corriendo.
Cuando el thread acaba llama a un m�todo del applet, pasandole el n�mero
que se le ha asignado. En este m�todo el applet hace dos cosas:
1.- Marca en el array que el thread ya no est� en ejecuci�n.
2.- Comprueba que todos los threads hayan terminado y entonces llama al
m�todo de continuaci�n.
Por supuesto hay que andar con mucho ojo y colocar los syncronized
adecuados.
Claro que tambi�n, en vez de un array, siempre puedes poner un simple
contador que incrementa o decrementa seg�n se lancen o terminen los
threads.
---------
Sobre lo segundo:
Me creo dos vectores, un vector para contener los threads especiales y
otro para contener los otros.
Cuando lanzo un thread lo guardo (su apuntador) en el vector adecuado.
Cuando finaliza un thread, me llama, para indicar tal circustancia. As�,
lo primero que hago es mirar en el vector de especiales y si el trhead
es uno de ellos con los valores contenidos dentro del vector, me voy
cargando al resto de los threads. Si el que ha acabado es uno de los
otros, entonces elimino el objeto del vector y compruebo el n�mero de
elementos que quedan, si ha llegado a 0 (no quedan m�s por ejecutar)
utilizo la informaci�n del vector de especiales para matar todos los
threads, esto lo tienes que hacer en un m�todo syncronized, claro.
Saludos,
--
Juan Gonzalo de Silva Medina
System.out.println("I Love Linux");
Technical Details
Message-ID:
<39F8C1AC.D72D4A8@caymasa.es>Path:
arc1-ca.pugleaf.net!supernews.google.com!sn-xit-02!sn-xit-03!supernews.com!news.tele.dk!194.25.134.62!newsfeed00.sul.t-online.de!newsfeed01.sul.t-online.de!t-online.de!fu-berlin.de!newsfeed.bcn.ttd.net!news.mad.ttd.net!not-for-mailReferences:
<39F803CA.2E736B40@cesatel.es>Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII X-Google-Thread: 1116f3,37b07589529d3d0d X-Google-Attributes: gid1116f3,public X-Google-ArrivalTime: 2000-10-26 16:40:30 PST Path: arc1-ca.pugleaf.net!supernews.google.com!sn-xit-02!sn-xit-03!supernews.com!news.tele.dk!194.25.134.62!newsfeed00.sul.t-online.de!newsfeed01.sul.t-online.de!t-online.de!fu-berlin.de!newsfeed.bcn.ttd.net!news.mad.ttd.net!not-for-mail From: Juan Gonzalo de Silva Medina <gonzalo@caymasa.es> Newsgroups: es.comp.lenguajes.java Subject: Re: Control de Threads Date: Fri, 27 Oct 2000 01:43:40 +0200 Organization: Telefonica Transmision de Datos Lines: 73 Message-ID: <39F8C1AC.D72D4A8@caymasa.es> References: <39F803CA.2E736B40@cesatel.es> NNTP-Posting-Host: 194.224.23.190 Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-Mailer: Mozilla 4.72 [es] (X11; U; Linux 2.2.14-5.0 i686) X-Accept-Language: es, en