Sunteți pe pagina 1din 16

YESENIA VIRIDIANA VALENCIA AVIA

Tpicos Avanzados de Programacin


Programacin concurrente multihilo
Qu diferencia existe entre utilizar la interfaz Runnable o la clase Thread al implementar
una aplicacin que contendr hilos!
"l uso de la clase Thread requiere utilizar herencia# $eber%a usarse cuando ha&a que
sobrescribir alg'n otro mtodo#
"l uso de la interfaz runnable permite que la clase herede de cualquier otra (ms
verstil)# *in embargo+ la e,ecucin requiere la construccin de un ob,eto a-adido (aquel
que implementa el interfaz Runnable) adems del ob,eto Thread#
Qu mtodos contiene la interfaz Runnable & que funcin tiene ste!
. public Thread(Runnable target) as% lo usamos en el e,emplo arriba+ se pasa
solamente la implementacin de la interfaz Runnable
. public Thread(Runnable target+ *tring name) se pasa adicionalmente un nombre
para el hilo
. public Thread(Thread/roup group+ Runnable target) constru&e un hilo dentro de un
grupo de hilos
. public Thread(Thread/roup group+ Runnable target+ *tring name)
constru&e un hilo con nombre dentro de un grupo de hilos
0a interfaz Runnable exige solamente el mtodo run()+ sin embargo+ normalmente se
implementan ms mtodos para crear un servicio completo que este hilo debe cumplir#
Aunque no hemos guardado las referencias de los hilos en unas variables+ los hilos no
caen en las manos del recolector de memoria1 siempre se mantiene una referencia al hilo
en su grupo al cual pertenece#
"l mtodo run() es p'blico & en muchos casos+ implementando alg'n tipo de servicio+ no
se quiere dar permiso a otros e,ecutar directamente el mtodo run()# Para evitar eso se
puede recurrir a la siguiente construccin1
class *ervice
Qu mtodos podemos sobrescribir de la clase Thread & que funcin realizan!
2n e,emplo de esto es el mtodo run() de la clase Thread# 0a clase Thread proporciona
una implementacin vac%a (el mtodo no hace nada) para el mtodo run()+ porque por
definicin+ este mtodo depende de la subclase# 0a clase Thread posiblemente no puede
proporcionar una implementacin medianamente razonable del mtodo run()#
Para reemplazar completamente la implementacin de un mtodo de la superclase+
simplememte se llama a un mtodo con el mismo nombre que el del mtodo de la
superclase & se sobreescribe el mtodo con la misma firma que la del mtodo
sobreescrito#
class Thread*egundoPlano extends Thread 3
void run() 3
# # #
4
4
5ul es la importancia del mtodo run()+ en una aplicacin que mane,e hilos!
YESENIA VIRIDIANA VALENCIA AVIA
6todo que representa la actividad del hilo#
*e puede redefinir este mtodo en una subclase# "l mtodo run() estndar e,ecuta el
ob,eto que se pas al constructor en como argumento target+ de haberlo+ con argumentos
secuenciales & por clave tomados de los argumentos args & kwargs+ respectivamente#
Qu importancia tiene el mtodo start() en el mane,o de los hilos! 7 a que mtodo
llama!
8nicia la actividad del hilo#
$ebe llamarse a lo sumo una vez por ob,eto hilo# 9ace las gestiones para que se llame al
mtodo run() del ob,eto es un hilo de control separado#
Por qu estados puede pasar un hilo!+ en que consisten estos! 7 qu mtodos
intervienen en cada uno de estos!

2n hilo puede tener solo uno de los cinco estados#
New
"ste es el estado despues de que el hilo instanciado se ha&a creado+ pero el
metodo start() no ha sido invocado todavia# "s un ob,eto Thread vivo+ pero aun sin
e,ecutar# "n este punto el hilo se considera not alive#
Runnable
"n este estado+ el hilo puede ser elegido para ser e,ecutado por el administrador
de tareas+ pero el administrador aun no lo ha elegido# "l hilo primero entra en el
estado de runnable cuando el metodo start() se ha invocado+ pero un hilo puede
tambien volver al estado de runnable despues de haber estado e,ecutandose+ o
volviendo del estado de espera:bloqueo+ o sleep# 5uando el hilo esta en estado
runnable se le considera alive#
Running
Aqui es donde esta la accion# "s el estado donde el hilo ha sido seleccionado por
el administrador de tareas desde la piscina de runnables para entrar al proceso de
e,ecucion# 2n hilo puede cambiar del estado derunning a otro estado por varias
razones# inclu&endo porque ;al administrador de tareas se le anto,a;# <ien+
YESENIA VIRIDIANA VALENCIA AVIA
veremos esas razones en breve# =i,ate en el grafico anterior+ ha& varias maneras
de volver al estadorunnable+ pero solo una para ser running+ el administrador de
tareas lo elige de entre todos los posibles de la piscina de runnables#
Waiting/blocked/sleeping
"ste estado se puede alcanzar cuando un hilo esta disponible para ser e,ecutado#
<ien+ asi que estos son tres estados combinados en uno+ pero todos ellos tienen
algo en comun+ el hilo esta aun alive+ pero actualmente+ no estan disponibles para
ser e,ecutados# "n otras palabras+ no estan en la piscina de runnables+ pero
pueden volver al estado mas tarde si algun evento en particular los activa#
Dead
2n hilo se le considera dead cuando su metodo run() se ha completado# Puede
estar todavia viable el ob,eto Thread+ pero &a no esta separado del hilo principal de
e,ecucion# 2na vez que el hilo esta muerto+ no puede ser devuelto a la vida> *in
invocas start() en un una instancia de un hilo muerto+ conseguiras una excepcion
en tiempo de e,ecucion#

Qu pasos se pudieran seguir para dise-ar una aplicacin basada en hilos!
"n ?ava los hilos estn en el paquete
,ava#lang#thread
& se puede usar por e,emplo dos hilos para realizar un peque-o pingP@A/1
Thread PingThread B neC Thread()D
PingThread#start()D
Thread PongThread B neC Thread()D
PongThread#start()D
Por defecto+ un hilo nuevamente creado & lanzado a'n siendo activado as% no hace nada#
*in embargo+ los hilos se e,ecutan durante un tiempo infinito & ha& que abortar el
programa de forma bruta1 controlE5 en el terminal#
"xtendemos la clase & sobreEescribimos el mtodo run()para que haga algo 'til1
public class 5$FPingThread extends Thread 3
public void run() 3
Chile(true) 3
*&stem#out#print(;ping ;)D
4
4
4
"l hilo hereda todo de la clase Thread+ pero sobreEescribe el mtodo run()# 9acemos lo
mismo para el otro hilo1
public class 5$FPongThread extends Thread 3
public void run() 3
Chile(true) 3
*&stem#out#print(;P@A/ ;)D
4
4
4
YESENIA VIRIDIANA VALENCIA AVIA
7 reprogramamos el hilo principal1
5$FPingThread PingThreadBneC 5$FPingThread()D
PingThread#start()D
5$FPongThread PongThreadBneC 5$FPongThread()D
PongThread#start()D
Qu pasos se pudieran seguir para dise-ar una applet que contenga hilos!
import ,ava#applet#GD
import ,ava#aCt#GD
import ,ava#util#$ateD
import ,ava#text#$ate=ormatD
public class Rel extends Applet implements Runnable 3
0abel timeD
$ate=ormat time=ormatD
Thread timerD
volatile boolean runningD
public void init() 3
time B neC 0abel()D
time#set=ont(neC =ont(;helvetica;+ =ont#<@0$+ HI))D
time#setAlignment(0abel#5"AT"R)D
set0a&out(neC <order0a&out())D
add(time+ <order0a&out#5"AT"R)D
time=ormat B $ate=ormat#getTime8nstance($ate=ormat#6"$826)D
4
public void start() 3
running B trueD
if (timer BB null) 3
timer B neC Thread(this)D
timer#start()D
4
4
public void run() 3
Chile(running) 3
time#setText(time=ormat#format(neC $ate()))D
tr& 3 Thread#sleep(HJJJ)D 4
catch (8nterrupted"xception e) 34
4
timer B nullD
4

public void stop() 3 running B falseD 4
public *tring getApplet8nfo() 3
YESENIA VIRIDIANA VALENCIA AVIA
return ;2n applet desplegando la hora;D
4
4
5rear un applet
Para crear un applet necesitamos escribir una clave de la clase Applet del
paquete ,ava#applet#GD
import ,ava#applet#GD
public class 6iApplet extends Applet
3
::5uerpo del KKappletKK#
4
"l cdigo anterior declara una nueva clase 6iApplet que hereda todas las capacidades de
la clase Applet de ?ava# "l resultado es un fichero 6iApplet#,ava#
2na vez creada la clase que compone el applet+ escribimos el resto del cdigo & despus
lo compilamos+ obteniendo el fichero 6iApplet#class# Para poder crear el applet se
necesita compilar el cdigo ?ava en un intrprete#
import ,ava#applet#GD
import ,ava#aCt#GD
import ,ava#util#GD
import ,ava#text#$ate=ormatD

public class 6iApplet extends Applet implements Runnable
3
private Thread hilo B nullD
private =ont fuenteD
private *tring horaActual B ;JJ1JJ1JJ;D

public void init()
3
fuente B neC =ont(;Lerdana;+ =ont#<@0$+ IM)D
4
public void start()
3
if (hilo BB null)
3
hilo B neC Thread(this+ ;Relo,;)D
hilo#start()D
4
4
public void run()
3
Thread hiloActual B Thread#currentThread()D
Chile (hilo BB hiloActual)
3
::obtener la hora actual
5alendar cal B 5alendar#get8nstance()D
$ate hora B cal#getTime()D
$ate=ormat df B $ate=ormat#getTime8nstance()D
horaActual B df#format(hora)D
repaint()D
YESENIA VIRIDIANA VALENCIA AVIA
tr&
3
Thread#sleep(HJJJ)D
4
catch (8nterrupted"xception e)34
4
4
public void paint(/raphics g)
3
::$ibu,ar un rectngulo alrededor del contenedor
g#draCN$Rect(H+ H+ get*ize()#CidthEN+ get*ize()#heightEN+ false)D
::"stablecer la =uente
g#set=ont(fuente)D
::mostrar la 9ora
g#draC*tring(horaActual+HM+MJ)D
4
public void stop()
3
hilo B nullD
4
4
Qu tipo de aplicaciones pudieran generarse con el uso de hilos!+ mencionar m%nimo HJ
e,emplos
HEun hilo puede hacer una busqueda larga en una base de datos o en el file s&stem+
mientras otro hilo dibu,a la interfaz grfica al usuario#
IE"n un servidor Ceb+ un hilo puede atender las peticiones entrantes & crear un hilo por
cada cliente que tenga que atender#
NE"n una animacin+ puede haber varios hilos dibu,ando varias partes de la pantalla#
ME 2tilizacin de los hilos para expresar algoritmos inherentemente paralelos# *e pueden
obtener aumentos de rendimiento debido al hecho de que los hilos funcionan mu& bien en
sistemas multiprocesadores# 0os hilos permiten expresar el paralelismo de alto nivel a
travs de un lengua,e de programacin#
OE 2tilizacin de los hilos en interfaces de usuario
6- 2tilizacin de los hilos en servidores
7- tilizacin de los hilos en el diseo de un kenel multihilo de sistema operativo distribuido
que distribu&a diferentes tareas entre los hilos#
PE 2tilizacin de los hilos para explotar la potencia de los multiprocesadores de memoria
compartida (sistemas fuertemente acoplados)#
QE 2tilizacin de los hilos como soporte de aplicaciones de tiempo real acelerando los
tiempos de respuesta para los eventos as%ncronos a travs de la gestin de se-ales#
HJE manejo de seales+ como por e,emplo las interrupciones del teclado1 se puede dedicar
un hilo a la espera de se-ales+ en vez de que stas interrumpan el proceso# Aormalmente+
YESENIA VIRIDIANA VALENCIA AVIA
el hilo se bloquea a la espera de se-ales+ & cuando se produce una se-al+ despierta & la
procesa# "sto puede eliminar la necesidad de interrupciones a nivel de usuario#
Por que es importante mane,ar la prioridad de los hilos!
Prioridad
5ada hilo tiene una prioridad+ que no es ms que un valor entero entre H & HJ+ de modo
que cuanto ma&or el valor+ ma&or es la prioridad#
"l planificador determina el hilo que debe e,ecutarse en funcin de la prioridad asignada a
cada uno de ellos# 5uando se crea un hilo en ?ava+ ste hereda la prioridad de su padre+
el hilo que lo ha creado# A partir de aqu% se le puede modificar su prioridad en cualquier
momento utilizando el mtodo setPriorit& # 0as prioridades de un hilo var%an en un rango
de enteros comprendido entre 68AFPR8@R8T7 & 6ARFPR8@R8T7 (ambas definidas en la
clase Thread)# "l entero ms alto designar la prioridad ms alta & el ms ba,o+ como es
de esperar+ la menor# *e e,ecutar primero el hilo de prioridad superior+ el llamado
S",ecutablesT+ & slo cuando ste para+ abandona o se convierte en SAo ",ecutableT+
comienza la e,ecucin de un hilo de prioridad inferior# *i dos hilos tienen la misma
prioridad+ el programador elige uno de ellos en alguna forma de competicin# "l hilo
seleccionado se e,ecutar hasta que1
. 2n hilo con prioridad ma&or pase a ser S",ecutableT#
. "n sistemas que soportan tiempoEcompartido+ termina su tiempo#
. Abandone+ o termine su mtodo run#
0uego+ un segundo hilo puede e,ecutarse+ & as% continuamente hasta que el intrprete
abandone#
5ul es la prioridad estndar o dada por definicin en ?ava a un hilo que se crea!
?ava es un lengua,e de programacin que incorpora hilos en el corazn del mismo
lengua,e#
5om'nmente+ los hilos son implementados a nivel de sistema+ requiriendo una interfaz
deprogramacin espec%fica separada del n'cleo del lengua,e de programacin#
"n que consiste la planificacin de los hilos!
5on los hilos el concepto de e,ecucin se separa del resto de la definicin de un
proceso# 2na aplicacin puede implementarse como un con,unto de hilos que cooperan &
e,ecutan concurrentemente en el mismo espacio de direcciones#
"n un monoprocesador+ los hilos pueden usarse como una a&uda a la
estructuracin de un programa & para solapar la ":* & el procesamiento# Puesto que la
penalizacin por el intercambio de hilos es m%nima+ comparada con el intercambio de
procesos+ stos beneficios se llevan a cabo a ba,o costo# *in embargo+ toda la
potencia de los hilos se hace evidente en un sistema multiprocesador+ puesto que pueden
emplearse para obtener un paralelismo real en las aplicaciones posibilitando un aumento
drstico del rendimiento# *in embargo+ puede demostrarse que+ en aplicaciones que
exi,an una interaccin considerable entre los hilos (paralelismo de grano medio)+
peque-as diferencias en la planificacin & gestin de hilos pueden tener un impacto
significativo en el rendimiento#
YESENIA VIRIDIANA VALENCIA AVIA
"lementos & mtodos claves1 entre las diversas propuestas de planificain de hilos
para multiprocesadores & de asignacin de procesadores+ se destacan los siguientes
cuatro mtodos1
Reparto de carga: los procesos no se asignan a un procesador en particular# *e
mantiene una cola global de hilos listos & cada procesador+ cuando est ocioso+
selecciona un hilo de la cola# "ste trmino se emplea para diastinguir esta estratgia del
esquema de balance de carga en el que el traba,o se asigna de forma mas permanente#
Planificacin por grupos: se panifica un con,unto de hilos afines para su e,ecucin en un
con,unto de procesadores al mismo tiempo+ seg'n la realcin de uno a uno#
Asignacin dedicada de procesadores: es el enfoque opuesto al reparto de
carga & ofrece una planificacin impl%cita definida por la asignacin de hilos a los
procesadores# 6ientras un programa se e,ecuta+ se le asigna un n'mero de procesadores
igual al n'mero de hilos que posea# 5uando el programa finaliza+ los procesadores
retornan a la reserva general para posibles asignaciones a otros programas#
Planificacin dinmica: el n'mero de hilos en un programa se puede cambiar en el
curso de la e,ecucin#
Qu es un hilo demonio & para que puede ser utilizado!+ dar m%nimo cinco e,emplos
"s un proceso que debe e,ecutarse continuamente en modo bacUground
(en segundo plano)+ & generalmente se dise-a para responder a peticiones de otros
procesos a travs de la red#
0os hilos demonio tambin se llaman servicios+ porque se e,ecutan+ normalmente+ con
prioridad ba,a & proporcionan un servicio bsico a un programa o programas cuando la
actividad de la mquina es reducida#
*i una aplicacin va a generar varios hilos que realicen actividades diferentes+ estos
pueden ser programados en la misma clase+ o se requiere una clase diferente por cada
actividad!+ por e,emplo que unos hilos realicen la lectura de datos+ otros la impriman+
otros realicen operaciones de suma+ otros de resta+ por mencionar un caso#
*i se puede
Que es un programa residente en memoria!
"s un programa que permanece en la memoria del ordenador+ por eso hablamos de
programas residentes en memoria# 5ualquier aplicacin que uses en tu ordenador (,uego+
pIp+ editor de imgenes+ Cord+ etc) ocupa cierta cantidad de memoria pero cuando cierras
el programa la memoria se libera & puede ser utilizada para otro fin# 0os programas
residentes permanecen todo el tiempo en memoria+ aunque no ests utilizndolo en ese
momento & por tanto ocupan permanentemente una porcin de la memoria de tu
ordenador#
5ada vez que enciendes el ordenador los programas residentes en memoria+ como el
antivirus+ se cargan ,unto con el sistema operativo de forma que estos programas estn
YESENIA VIRIDIANA VALENCIA AVIA
disponibles desde el primer momento# "n el caso del antivirus sto permite que el sistema
est protegido desde que el ordenador arranca sin que tengas tu que abrir el antivirus
cada vez que enciendes el ordenador#
Qu se entiende por una aplicacin que se e,ecuta en primer plano!+ da tres e,emplos
*olo puede haber un proceso en primer plano al mismo tiempo+ el proceso que esta en
primer plano+ es el que interactua con usted recibe entradas de teclado+ & env%a las
salidas al monitor# (*alvo+ por supuesto+ que ha&a redirigido la entrada o la salida+)
Qu se entiende por una aplicacin que se e,ecuta en segundo plano!+ da tres e,emplos
0os programas que se e,ecutan en segundo plano son aquellos que siguen abiertos en
forma silenciosa e,emplo1 los antivirus si te fi,as aba,o a tu derecha al lado de donde esta
la hora te vas a dar cuenta que tenes algunos iconos que estn activos esos son los
programas que estn en segundo plano ha& miles te digo algunos1 daemon tools+ tune up
utilities+ antivirus la gran ma&oria+ gamebooster etc
5mo se crea un demonio en ?ava!
Puede marcar un hilo como un demonio usando el mtodo set$aemon# *eg'n el doc de
,ava1 6arca este hilo como un hilo de demonio o un subproceso de usuario# 0a mquina
Lirtual ?ava sale cuando las roscas slo e,ecuta todos los subprocesos del demonio#
$ebe llamar a este mtodo antes de inicia el subproceso#
Primero+ este mtodo llama al mtodo checUAccess de este hilo sin argumentos# "sto
puede resultar en lanzar una excepcin *ecurit&"xception (en el subproceso actual)#
"n qu consiste el algoritmo o protocolo de productorEmonitorEconsumidor+ & para que se
utiliza!
"ste con,unto de situaciones de programacin son conocidos como escenarios
Vproductor:consumidorWD donde el productor genera un canal de datos que es consumido
por el consumidor# Algunos lengua,es de programacin+ como ?ava+ proporcionan una
caracter%stica al traba,ar con threads1 la sincronizacinD esto permite+ valga la
redundancia+ sincronizar los procesos para que traba,en de manera correcta# "n esta
primera entrada veremos un e,emplo de ProductorE5onsumidor+ en el que A@ se utiliza la
sincronizacin+ con el fin de entender me,or los problemas que se presentan cuando los
subprocesos Sno se ponen de acuerdoT#
*intaxis & e,emplos de las diferentes formas en las que se puede programar el
modificador s&nchronized
0a forma general de un bloque *&nchronizedes1
s&nchronized (ob,eto)3
::declaraciones para ser sincronizadas
4
Aqu% ob,eto hace referencia al ob,eto que va a ser sincronizado# 2n ob,eto sincronizado
asegura que una llamada a un mtodo+ ocurra solo despus de que el hilo que llama ha
ingresado al monitor del ob,eto#
YESENIA VIRIDIANA VALENCIA AVIA
"l modificador s&nchronized+ para qu se utiliza!+ escribir un e,emplo & tratar de
explicarlo
*e usa para indicar que ciertas partes del cdigo+ (habitualmente+ una funcin miembro)
estn sincronizadas+ es decir+ que solamente un subproceso puede acceder a dicho
mtodo a la vez#
5undo es necesario hacer uso de la sincronizacin de hilos!+ qu mecanismos
(algoritmos) se pueden utilizar para la sincronizacin de hilos!
0a razn ms com'n para la sincronizacin es cuando dos o ms hilos necesitan acceso
a un recurso compartido que slo puede ser utilizado por un hilo a la vez# @tra razn para
la sincronizacin es cuando un hilo est esperando un evento causado por otro hilo# "n
este caso+ debe de haber alg'n medio por el cual el primer hilo se mantenga en estado
suspendido hasta que el evento ocurra#
0a sincronizacin esta soportada por la palabra clave s&nchronized & por unos
cuantos mtodos bien definidos que tienen todos los ob,etosXX#
Aparte del uso del modificador s&nchronized+ que mtodos pueden ser utilizados para
auxiliar en la sincronizacin de los hilos en una aplicacin!
parte del uso del modificador s&nchronized+ que mtodos pueden ser utilizados para
auxiliar en la sincronizacin de los hilos en una aplicacin! volatile es+ ,unto con
s&nchronized+ uno de los mecanismos de sincronizacin bsicos de ?ava#
*e utiliza este modificador sobre los atributos de los ob,etos para indicar al compilador
que es posible que dicho atributo va&a a ser modificado por varios threads de forma
simultanea & as%ncrona+ & que no queremos guardar una copia local del valor para cada
thread a modo de cach+ sino que queremos que los valores de todos los threads estn
sincronizados en todo momento+ asegurando as% la visibilidad del valor actualizado a
costa de un peque-o impacto en el rendimiento#
Qu venta,as & que desventa,as podemos tener al programar con hilos!
uedes de,ar e,ecutando tareas en el fondo#
"vitas el bloqueo de un programa#
8ncrementas la velocidad de e,ecucin#
Puedes hacer programas mucho ms adecuados#
0a programacin esmucho ms estructurada & fcil#
Qu problemas se pueden generar con el uso de hilos!
0as problemas se deben a las siguientes causas 1
5omple,idad 1 Aunque es cierto que la programacin con hilos puede proporcionar una
forma ms natural de resolver los problemas+ existen otras cosas que se deben tener en
cuenta# 0a programacin con hilos es ms dif%cil que la clsica programacin secuencial#
Por e,emplo+ cuando se mantiene+ depura u optimiza una aplicacin con hilos+ se deben
tener en cuenta la existencia de m'ltiples hilos de cdigo en e,ecucin# Por ello
generalmente es ms fcil depurar & optimizar un programa de hilo simple#
*incronizacin 1 *e debe coordinar el acceso a los datos compartidos mediante bloqueos#
@lvidar un bloqueo puede producir la corrupcin de los datos#
Posibilidad de deadlocU 1 0as dependencias circulares en los bloqueos pueden originar
deadlocU#
YESENIA VIRIDIANA VALENCIA AVIA
$epuracin dif%cil+ debido a las dependencias entre los datos & las dependencias de
tiempo# $epurar en un sistema multiprocesador es ms complicado+ ms costoso+ & los
errores no siempre son reproducibles# 2na biblioteca de hilos puede ser 'til para detectar
& analizar errores en un entorno uniprocesador antes de ser probada en un sistema
multiprocesador# "xisten dos tipos de errores+ los errores serie que pueden ocurrir en un
entorno uniprocesador+ & los errores paralelos que son inherentes a una e,ecucin
paralela+ & son dif%ciles de detectar#
Rompen la abstraccin+ lo que impide dise-ar mdulos independientes#
@btener un buen rendimiento es dif%cil# 0os bloqueos demasiado simples (grano grueso)
disminu&en el nivel de concurrencia+ mientras que los bloqueos de grano fino son
demasiado complicados# Adems la velocidad de cambio de contexto del sistema
operativo influ&e notablemente en el rendimiento#
*oporte escaso 1 "l cdigo es dif%cil de transportar a otras arquitecturas que no soportan
hilos# 0as librer%as estndar no suelen ser hiloEseguras# 0as llamadas al Uernel o al
sistema de gestin de ventanas pueden no estar preparadas para soportar m'ltiples hilos#
$isponibilidad de herramientas 1 Para favorecer el desarrollo de aplicaciones multihilo+ la
industria necesitar crear herramientas de depuracin & optimizacin ms refinadas# *in
embargo+ la tecnolog%a de los depuradores & optimizadores es relativamente ,oven lo que
a corto plazo supone un problema para los programadores# 2n entorno de programacin
multihilo debe proporcionar depuradores con soporte multihilo Y5A*QJZ# 0a informacin
debe ser extra%da del T5< (bloque de control del hilo) & hacerla disponible al usuario# 0os
cambios de contexto deber%an ser visibles para el usuario# Por e,emplo+ cuando se va a
producir un cambio de contexto+ el usuario podr%a elegir si continua depurando despus
del punto de suspensin o si cambia al contexto de otro hilo# Adems se podr%an
presentar ventanas de depuracin separadas para cada hilo dentro de un proceso#
2tilizacin de cdigo no seguro 1 *e debe tener mucho cuidado a la hora de mezclar
cdigo multihilo con cdigo no hiloEseguro+ es decir+ cdigo no preparado para e,ecucin
en un entorno multihilo#
5ul es la medida de tiempo utilizada en los mtodos sleep()+ Cait()!
un intervalo de tiempo indeterminado+ a diferencia del uso de la llamada al sistema sleep+
que simplemente lleva al hilo a un estado de SdormidoT+ & siempre durante un n'mero de
milisegundos concreto#
A qu paquete pertenece la clase Thread!
?ava#lang


"l paquete ,ava#lang define una clase Thread que sirve para crear hilos#
"l otro modo de crear hilos es mediante la implementacin de la interfaz Runnable#

$a un e,emplo de cmo activar un hilo
class 6iThread extends Thread 3
public void run() 3
# # #
4
$a un e,emplo de cmo podemos parar un hilo sin utilizar el mtodo stop()
YESENIA VIRIDIANA VALENCIA AVIA
Puedes usar la clase =utureTasU de ,ava#util#concurrent pasndole por el constructor un
Runnable & lo puedes parar con Tu=utureTasU#cancel(true)D
Para que es utilizado el modificador de tipo volatile
"s un modificador que a-adido a una variable+ advierte al compilador que esta puede ser
modificada por una rutina en segundo plano (bacUground)+ por una rutina de interrupcin+
o por un dispositivo de entrada salida# "s decir+ que puede sufrir modificaciones fuera del
control del programa#
0a declaracin de un ob,eto con este atributo+ previene al compilador de hacer ninguna
asuncin sobre el valor del ob,eto mientras se e,ecutan instrucciones en las que est
involucrado+ advirtindolo que dicho valor puede cambiar en cualquier momento#
Tambin previene al compilador de que no debe hacer de dicho ob,eto una variable de
registro#
*intaxis
volatile Y[tipoEdeEvariable\Z [nombreEdeEvariable\ Y B [valor\ ZD
[nombreEdeEfuncin\ ( volatile [tipo\ [nombreEdeEvariable\ )D
[nombreEdeEmtodo\ volatileD
volatile [instanciado de clase\D
"n qu consiste el paquete ,ava#util#concurrent!
8nterfaces & clases que proporcionan un marco para el bloqueo & la espera de condiciones
que es distinta de una funcin de sincronizacin & monitores# "l marco permite una
flexibilidad mucho ma&or en el uso de las cerraduras & las condiciones+ a expensas de la
sintaxis ms incmodo#
"ste paquete proporciona clases 'tiles que se utilizan com'nmente para la
sincronizacin de datos# 0os ms destacados son1
E *emaphore1 herramienta clsica de concurrencia
E 5&clic<arrier1 'til para programar en paralelo
E 5ount$oCn0atch1 utilidad para bloquear hasta que un n'mero dado de se-ales+ eventos
o condiciones se cumplan#
Qu clases e interfaces contienes para la sincronizacin de hilos!
"ste paquete proporciona clases para bloquear & esperar a que se cumplan condiciones#
"n qu consiste el paquete ,ava#util#concurrent#locUs!
"ste paquete proporciona clases para bloquear & esperar a que se cumplan
condiciones# Permite ma&or flexibilidad en el uso de bloqueos & condiciones en el coste
de una sintaxis dif%cil# "ste paquete proporciona bloqueos de lectura & escritura#
Qu clases e interfaces contienes para la sincronizacin de hilos!
0a interfaz Runnable+ dado que las
interfaces representan una forma de encapsulamiento del traba,o que una clase debe
realizar#
As%+ se utilizan para el dise-o de requisitos comunes a todas las clases que se tiene
previsto implementar# 0a interfaz define el traba,o+ la funcionalidad que debe cubrirse+
mientras que la clase o clases que implementan la interfaz realizan dicho traba,o (cumplen
esa funcionalidad)#
Todas las clases o grupos de clases que implementen una cierta interfaz debern seguir
las mismas reglas de funcionamiento#
YESENIA VIRIDIANA VALENCIA AVIA
"l otro mecanismo de creacin de hilos+ como &a hemos dicho+ consistir%a en la creacin
previa de una subclase de la clase Thread+ la cual podr%amos instanciar despus#
Por e,emplo+
class 6iThread extends Thread 3
public void run() 3
###
4
4
A groso modo explicar en que consisten las siguientes clases e interfaces1
8nterface Queue
8nterfaz de colas ["\
Parmetros de tipo1
" E el tipo de elementos se celebr en esta coleccin
Todos superinterfaces1
5oleccin ["\+ ["\ 8terable
Todos subinterfaces conocido1
<locUing$eque ["\+ <locUingQueue ["\+ deque ["\
Todas las clases que implementan conocidos1
AbstractQueue+ Arra&<locUingQueue+ Arra&$eque+ 5oncurrent0inUedQueue+ $ela&Queue+
0inUed<locUing$eque+ 0inUed<locUingQueue+ 0inUed0ist+ Priorit&<locUingQueue+
Priorit&Queue+ *&nchronousQueue
interfaz de cola ["\ p'blica
extiende 5oleccin ["\
2na coleccin dise-ada para la celebracin de los elementos antes de su procesamiento#
Adems de las operaciones bsicas 5ollection+ colas proporcionan la insercin adicional+
la extraccin+ & las operaciones de inspeccin# 5ada uno de estos mtodos existe en dos
formas1 se produce una excepcin si la operacin falla+ el otro devuelve un valor especial
(null o false+ dependiendo de la operacin)# "sta 'ltima forma de la operacin de insercin
est dise-ado espec%ficamente para su uso con las implementaciones de cola de la
capacidadErestringidasD en la ma&or%a de las implementaciones+ las operaciones de
insercin no pueden fallar#
8nterface <locUing Queue
8nterface <locUingQueue ["\
Parmetros de tipo1
" E el tipo de elementos se celebr en esta coleccin
Todos superinterfaces1
5oleccin ["\+ ["\ 8terable+ cola ["\
Todos subinterfaces conocido1
<locUing$eque ["\
Todas las clases que implementan conocidos1
Arra&<locUingQueue+ $ela&Queue+ 0inUed<locUing$eque+ 0inUed<locUingQueue+
Priorit&<locUingQueue+ *&nchronousQueue
interfaz p'blica <locUingQueue ["\
extiende ["\ cola
YESENIA VIRIDIANA VALENCIA AVIA
2na cola que+ adems+ apo&a las operaciones que esperan a la cola para ser no vac%a al
recuperar un elemento+ & esperar a que el espacio est disponible en la cola cuando se
almacena un elemento#
<locUingQueue mtodos estn disponibles en cuatro formas+ con diferentes formas de
mane,ar las operaciones que no pueden ser satisfechas de inmediato+ pero se pueden
satisfacer en alg'n momento en el futuro1 uno produce una excepcin+ la segunda
devuelve un valor especial (null o false+ dependiendo de la funcionamiento)+ la tercera
bloquea el subproceso actual de forma indefinida hasta que la operacin puede tener
xito+ & el cuarto bloques de slo un l%mite de tiempo mximo dado antes de abandonar#
"stos mtodos se resumen en la tabla siguiente1
A <locUingQueue no acepta elementos nulos# 8mplementaciones tirar
AullPointer"xception en los intentos de a-adir+ poner u ofrecer un valor nulo# 2n valor
nulo se utiliza como valor centinela para indicar el fracaso de las operaciones electorales#
8nterface 0ocU
Todas las clases que implementan conocidos1
Reentrant0ocU+ ReentrantRead]rite0ocU#Read0ocU+ ReentrantRead]rite0ocU#]rite0ocU
0ocU interfaz p'blica
8mplementaciones 0ocU proporcionan ms extensas operaciones de bloqueo que puede
obtenerse utilizando mtodos & estados sincronizados# Permiten estructuracin ms
flexible+ puede tener propiedades mu& diferentes+ & puede soportar m'ltiples ob,etos de
condicin asociadas#
2n bloqueo es una herramienta para controlar el acceso a un recurso compartido por
varios subprocesos# Por lo general+ un bloqueo proporciona acceso exclusivo a un recurso
compartido1 slo un hilo a la vez puede adquirir el bloqueo & todo el acceso al recurso
compartido requiere que el bloqueo se adquiri en primer lugar# *in embargo+ algunas
cerraduras permiten el acceso simultneo a un recurso compartido+ como el bloqueo de
lectura de un Read]rite0ocU#
"l uso de mtodos o declaraciones sincronizadas permite acceder a la pantalla de
bloqueo impl%cito asociado a cada ob,eto+ sino que obliga a todas las adquisiciones de
bloqueo & la liberacin se produzca de una forma de bloques estructurados1 cuando se
adquieren varias cerraduras que debe ser puesto en libertad en el orden inverso+ & todos
los bloqueos deben ser liberados en el mismo mbito lxico en el que se adquirieron
*emaphore
2n *emaphore de conteo# 5onceptualmente+ un semforo mantiene un con,unto de
permisos# 5ada adquirir () bloquea si es necesario+ hasta que el permiso est disponible+
& luego se lo lleva# 5ada versin () a-ade un permiso+ lo que podr%a liberar un adquirente
de bloqueo# *in embargo+ no se usan los ob,etos de permisos realesD el semforo slo
mantiene un recuento del n'mero disponible & act'a en consecuencia#
0os semforos se utilizan a menudo para restringir el n'mero de hilos que pueden tener
acceso a algunos recursos (f%sicos o lgicos)
<arriers (clase 5&clic<arrier)
YESENIA VIRIDIANA VALENCIA AVIA
son 'tiles en programas que implican un partido de tama-o fi,o de temas que a veces
deben esperar por los dems# 0a barrera se denomina c%clico + &a que se puede volver a
utilizarse despus de que se liberen los subprocesos en espera#
A 5&clic<arrier admite una opcin Runnable mandato que se e,ecuta una vez por cada
punto de barrera+ despus de que el 'ltimo hilo de la fiesta llega+ pero antes de que se
liberan todos los hilos# "ste efecto de barrera es 'til para la actualizacin de estado
compartida antes que cualquiera de las partes continuar#
"xecutor
Proporciona funciones de e,ecucin de comandos para invocar a compiladores# Ao se
puede heredar esta clase#
Todos subinterfaces conocido1
"xecutor*ervice+ *cheduled"xecutor*ervice
Todas las clases que implementan conocidos1
Abstract"xecutor*ervice+ *cheduledThreadPool"xecutor+ ThreadPool"xecutor
",ecutor interfaz p'blica
2n ob,eto que e,ecuta tareas e,ecutables presentados# "sta interfaz proporciona una
manera de desvincular la presentacin de tareas desde la mecnica de cmo se llevar a
cabo cada tarea+ inclu&endo detalles de uso hilo+ programacin+ etc "l albacea se utiliza
normalmente en lugar de crear expl%citamente temas
=utures & 5allable
=utures
8nterface =uture [L\
Parmetros de tipo1
L E "l tipo de resultado devuelto por el mtodo get de este futuro
Todos subinterfaces conocido1
Respuesta [T\ Runnable=uture [L\+ Runnable*cheduled=uture [L\+ *cheduled=uture
[L\
Todas las clases que implementan conocidos1
=utureTasU+ *Cing]orUer
interfaz p'blica =uture [L\
2n futuro representa el resultado de un clculo asincrnico# *e proporcionan mtodos
para comprobar si el clculo es completa+ que esperar a su finalizacin+ & para recuperar
el resultado de la computacin# "l resultado slo puede ser recuperada mediante el
mtodo de conseguir cuando el clculo se ha completado+ el bloqueo si es necesario
hasta que est listo# 5ancelacin se realiza por el mtodo de cancelacin# *e
proporcionan mtodos adicionales para determinar si la tarea se ha completado
normalmente o se cancel# 2na vez que el clculo se ha completado+ el clculo no se
puede cancelar# *i desea utilizar un futuro por el bien de cancellabilit& pero no
proporciona un resultado 'til+ se puede declarar tipos de forma =uture [\ & devolver nulo
como consecuencia de la tarea sub&acente#
5allable
[L\ 8nterfaz invocable
Parmetros de tipo1
YESENIA VIRIDIANA VALENCIA AVIA
L E el tipo de resultado de la llamada al mtodo
Todos subinterfaces conocido1
?ava5ompiler#5ompilationTasU
interfaz [L\ p'blica rescatable
2na tarea que devuelve un resultado & puede producir una excepcin# 0os
implementadores definir un 'nico mtodo sin argumentos llamados llamada#
0a interfaz invocable es similar al e,ecutable+ &a que ambos estn dise-ados para las
clases cu&as instancias son potencialmente e,ecutados por otro subproceso# A Runnable+
sin embargo+ no devuelve un resultado & no se puede lanzar una excepcin comprobada#
0a clase ",ecutores contiene mtodos de utilidad para convertir de otras formas comunes
de las clases se puede llamar
"xchanger
5lase 8ntercambiador [L\
,ava#lang#@b,ect
,ava#util#concurrent#"xchanger [L\
Parmetros de tipo1
L E "l tipo de los ob,etos que pueden ser intercambiados
[L\ 8ntercambiador clase p'blica
extiende ob,eto
2n punto de sincronizacin en la que las discusiones pueden vincular & cambiar
elementos en pares# 5ada hilo presenta alg'n ob,eto en la entrada al mtodo de
intercambio+ coincide con un hilo de pare,a+ & recibe ob,etos de su socio en la declaracin#
2n intercambiador puede ser visto como una forma bidireccional de un
*&nchronousQueue# 8ntercambiadores pueden ser 'tiles en aplicaciones tales como
algoritmos genticos & dise-os de tuber%as#
",emplos de uso1 "stos son los aspectos ms destacados de una clase que utiliza un
intercambiador de cambiar amortiguadores entre los hilos de manera que el hilo de
llenado del b'fer consigue un recin vaciado uno cuando lo necesita+ dar el relevo el
llenado hasta el hilo de vaciar el buffer#

S-ar putea să vă placă și