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#