Please enable JavaScript.
Coggle requires JavaScript to display documents.
Concurrencia - Coggle Diagram
Concurrencia
Constructores de Thread
public Thread ( String threadName)
construye un thread cuyo nombre es
threadName
public Thread ()
construye un thread cuyo nombre es Thread
concatenado con un dígito (Thread1,
Thread2)
Planificación de threads
La aparición de hilos de alta prioridad
puede posponer indefinidamente la
ejecución de hilos de prioridades ba.jas
Mantener un hilo de máxima prioridad
ejecutándose en todo momento
La prioridad de un Thread se puede
ajustar con el método :
setPriority ( int prioridad )
1< prioridad < 10
obtener con el método :
getPriority ( )
Hilo puede llamar a YIELD para dar oportunidad a otros hilos de si misma prioridad a ejecutarse
Esto se usa SIEMPRE que el manejo de la concurrencia NO este basado en quantum
Hilo con prioridad mas alta que el que se esta ejecutando, puede desalojar a este si:
si invoca a resume.
si se acaba el período de sleep.
si se completa la E/S por la cual se bloqueo.
si se invoca notify o notifyAll para un hilo que
había invocado wait.
Un hilo se ejecuta hasta que:
muere.
se bloquea para entrada/salida.
Invoca a sleep.
invoca a yield.
es desalojado por un hilo de mayor prioridad.
hasta que expira su quantum.
Clase Thread
hilo de ejecución de Java (Java.lang)
Metodos
run() activa el thread
start () activa run y vuelve al llamante
join () espera por la terminación ( timeout opcional)
interrupt () sale de un wait, sleep o join
isInterrupted ()
yield ()
stop (), suspend (), resume (
Metodos estaticos
sleep (milisegundos)
currentThread ()
Metodo clase obj controlan suspension Thread
wait() (equivale a 0 milisegundos)
wait (milisegundos)
notify () notifyAll()
SIRVEN PARA
comunicar los threads entre si
WAIT AND NOTIFY
PARA
que el contenido del obj sea estable TODO debe ocurrir en el metodo Synchronized
Cuando se suspende el thread libera en
forma atómica el bloqueo del obj
La prueba de la condición debe estar
SIEMPRE en un bucle
Grupos de Hilos
permite identificar varios hilos como
pertenecientes a grupo de hilos
clase ThreadGroup contiene los
métodos necesarios
grupo tiene un nombre único
se pueden tratar
colectivamente.
Metodos de ThreadGroup
enumerate, getMaxPriority, getname, getparent, isdaemon, list, parentOf,resume, setdaemon, setmaxpriority, stop, suspend, tostring
Sincronizacion
Solo un thread por vez puede acceder a un
objeto
Metodos sincronizados
La ejecución de dos métodos
sincronizados es mutuamente EXCLUYENTE
Metodos que tengan que acceder al mismo obj se deben sincronizar para LOGRAR el BLOQUEO
Métodos synchonized
anulados
Si una clase extendida anula un método synchronized, el nuevo método PUEDE O NO ser synchronized
El método de la superclase continúa siendo Synchronized
El método de la superclase continua
permite
ejecutar código sincronizado sin
invocar un método sincronizado
Forma general:
synchronized(obj a bloquear aka Expresion)
sentencia
Sincronizacion de Hilos
Java usa monitores para la sincronización de hilos.
TODO objeto con métodos synchronized es un monitor.
El monitor SOLO permite a UN hilo por vez ejecutar un método synchronized sobre el objeto
Ejemplo productor / consumidor
Dos hilos comparten una celda de memoria, uno
coloca datos en la celda y el otro consume esos
datos.
sin sincronización es posible que el productor
coloque datos antes que el consumidor los
consuma, o que el consumidor duplique datos si
consume datos antes que el productor produzca
un nuevo dato.
Java soporta la ejecución paralela de
varios threads
múltiples threads ejecutándose en
una
máquina comparten recursos (memoria)
varias maquinas necesitan capacidades de comunicacion
Aplicacioens Concurrentes
Descargas de grandes archivos de la
WWW
Recolección de basura de Java (garbage
colector)
Creacion de threads
crear hilo
Ejecutarlo :
cuando run devuelve el control el thread ha
éste invoca al método run
Invocar el método start,
El invocador se ejecuta en paralelo con el
thread
terminado
Configurarlo : nombre, prioridad,etc.
Se puede crear:
extendiendo una clase de Thread
implementando la
Interface Runnable
, que nos provee el metodo RUN, para implementarlo en el thread
Manejo de la Concurrencia
Ejecucion de un hilo hasta que termine o bloquee (actividades de E/S)
Ejecución de un hilo por asignación de
quantum (cantidad de tiempo