Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porSantiago Lorenz Modificado hace 11 años
1
Concurrencia En el mundo real pasan muchas cosas a la vez
Con varias computadoras se pueden ejecutar múltiples programas Con una sola computadora se pueden simular la ejecución paralela de varias actividades múltiples hilos de ejecución comparten el uso de un procesador Informática III
2
Concurrencia Java soporta la ejecución paralela de varios threads (hilos) múltiples threads ejecutándose en una máquina comparten recursos (memoria) múltiples threads ejecutándose en varias máquinas necesitan capacidades de comunicación Informática III
3
Programación concurrente OO
La concurrencia es natural en OO Ada y Simula 67 ya soportaban concurrencia Java es único entre los lenguajes de propósitos generales que pone primitivas de concurrencia a disposición del programador Informática III
4
Aplicaciones concurrentes
Descargas de grandes archivos de la WWW Recolección de basura de Java (garbage colector) Informática III
5
Creacion de threads Crear un thread
Configurarlo : nombre, prioridad,etc. Ejecutarlo : invocar el método start, éste invoca al método run cuando run devuelve el control el thread ha terminado Informática III
6
Un thread se puede crear:
Creacion de threads Un thread se puede crear: extendiendo una clase de Thread implementando la interface Runnable Informática III
7
La clase Thread Un hilo de ejecución de Java (Java.lang) Métodos:
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 () Informática III
8
La clase Thread Métodos estáticos:
sleep (milisegundos) currentThread () Métodos de la clase Object que controlan la suspensión del Thread actual: wait() (equivale a 0 milisegundos) wait (milisegundos) notify () notifyAll() sleep se invoca con un argumento que especifica durante cuanto tiempo el hilo que se esta ejecutando debe dormir. Cuando duerme no compite por el uso del procesador y otros hilos de prioridad más baja puede ejecutarse. currentThread: devuelve una referencia al método que se está ejecutando wait espera hasta que se produce una situación notify para informar a los que esperan que ocurrio algo Informática III
9
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) Informática III
10
Inicio de la ejecución de un hilo
Se invoca al método start Este invoca a run y devuelve el control al llamante El invocador se ejecuta en paralelo con el thread Informática III
11
Estados de hilos: ciclo de vida
nacido start Completar E/S listo Asignar procesador Termina quantum notify notifyAll ejecución Solicitud E/S wait sleep suspend bloqueado en espera dormido suspendido stop completar muerto Expìra sleep Resume Informática III
12
Sincronización Solo un thread por vez puede acceder a un objeto
bloquea Thread Thread Informática III
13
Métodos sincronizados
Los métodos que tengan que acceder al mismo objeto se deben sincronizar para lograr el bloqueo. La ejecución de dos métodos sincronizados es mutuamente excluyente. Informática III
14
Métodos sincronizados
class Account { private double balance public Account ( double inicial) { balance=inicial; } public synchronized double getBalance{ return balance; } public synchronized void deposito (double amount) { balance += amount; }} Informática III
15
Métodos sincronizados
Instancia (bloquean objetos) Clase (bloquean clases) Informática III
16
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. Informática III
17
Sentencias synchronized
Permite ejecutar código sincronizado sin invocar un método sincronizado bloqueo sentencia Informática III
18
Sentencias synchronized
Forma general: synchronized (expresión) sentencia Cuando la sincronización se usa en muy pocos lugares. Son más convenientes los métodos sincronizados Objeto a bloquear Informática III
19
Wait y notify Sirven para comunicar los threads entre sí
synchronized void cuandoCondicion ( ) { while ( ! condicion ) wait ( ); ….hacer lo que sea necesario cuando la condicion sea cierta } Informática III
20
Wait y notify synchronized void cambiaCondicion ( ) {
….cambiar algún valor usado en condición notify ( ) ; // notifyAll ( ) } Informática III
21
Wait y notify Para que el contenido del objeto sea estable todo debe ocurrir en método synchronized. Cuando se suspende el thread libera en forma atómica el bloqueo del objeto La prueba de la condición debe estar siempre en un bucle Informática III
22
Wait public final void wait (long timeout) throws InterruptedException
public final void wait (long timeout, int nanos) throws InterruptedException public final void wait () throws InterruptedException Informática III
23
Notify public final notify ( ) public final notifyAll ( )
Informática III
24
Prioridades De Los threads
Todo thread en Java tiene una prioridad en el intervalo : Thread.MIN_PRIORITY (constante que vale 1) Thread.MAX_PRIORITY (constante que vale 10) Thread.NORM_PRIORITY (constante que vale 5) Informática III
25
Manejo de la Concurrencia
Ejecución de un hilo hasta que termine o se bloquee (actividades de E/S) Ejecución de un hilo por asignación de quantum (cantidad de tiempo) Informática III
26
Planificación de threads
Mantener un hilo de máxima prioridad ejecutándose en todo momento, de acuerdo a la forma en que maneje la concurrencia. La aparición de hilos de alta prioridad puede posponer indefinidamente la ejecución de hilos de prioridades ba.jas Informática III
27
Planificación de threads
La prioridad de un Thread se puede ajustar con el método : setPriority ( int prioridad ) 1< prioridad < 10 La prioridad de un Thread se puede obtener con el método: getPriority ( ) Informática III
28
Planificación de threads
Un hilo puede llamar al método yield para dar oportunidad a otros hilos de su misma prioridad a ejecutarse, esto se usa siempre que el manejo de la concurrencia no este basado en quantum. public static void yield ( ) Informática III
29
Planificación de threads
Un hilo se ejecuta hasta que ocurre alguna de las situaciones siguientes: 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. Informática III
30
Planificación de threads
Un hilo con prioridad más alta que el que se está ejecutando, puede desalojar a éste 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. Informática III
31
Sincronización de hilos
Java usa monitores para la sincronización de hilos. Todo objeto con métodos synchronized es un monitor. El monitor sólo permite a un hilo por vez ejecutar un método synchronized sobre el objeto. Informática III
32
Sincronización de hilos
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. Informática III
33
Sincronización de hilos
Ejemplo: Informática III
34
Interface Runnable Otra forma de crear un thread es implementando la interface runnable, que nos provee el metodo run, para implementarlo en el thread. Informática III
35
Interface Runnable Ejemplo: Informática III
36
Grupos de hilos Permite identificar varios hilos como pertenecientes a grupo de hilos. La clase ThreadGroup contiene los métodos necesarios para crear y manipular grupos de hilos. El grupo tiene un nombre único. Los grupos se pueden tratar colectivamente. se pueden suspender todos los hilos del grupo, se pueden reanudar, se pueden matar Informática III
37
Grupos de hilos Tiene dos constructores:
public ThreadGroup (String cadenanombre) construye un ThreadGroup cuyo nombre es cadenanombre public ThreadGroup ( ThreadGroup padre, String cadenanombre) construye un ThreadGroup hijo de padre, llamado cadenanombre Informática III
38
Grupos de hilos La clase Thread tiene tres constructores que permite crear un Thread y asociarlo a un grupo: public Thread (ThreadGrroup threadGroup, String nombre) public Thread (ThreadGrroup threadGroup, Runnable objetoEjecutable) public Thread (ThreadGrroup threadGroup, Runnable objetoEjecutable, String cadena) Informática III
39
Métodos de ThreadGroup
public int activeCount(); public int activeGroupCount(); public final void checkAccess(); public final void destroy(); activeCount: devuelve el numero de hilos activos de un grupo, más el número de hilos activos en todos sus grupos de hilos hijos. checkAccess: chequea si el hilo que esta corriendo actualmente tiene permiso para modificar su threadGroup destroy: destruye su threadGroup y todos sus subgrupos (todos los hilos del grupo deben haber sido parados con stop Informática III
40
Métodos de ThreadGroup
public int enumerate(Thread list[]); public int enumerate(Thread list[], boolean recurse); public int enumerate(ThreadGroup list[]); public int enumerate(ThreadGroup list[], boolean recurse); Informática III
41
Métodos de ThreadGroup
public final int getMaxPriority(); public final String getName(); public final ThreadGroup getParent(); public final boolean isDaemon(); public void list(); public final boolean parentOf(ThreadGroup g); list:manda información útil sobre el thread a la impresora. Sirve para debugging Informática III
42
Métodos de ThreadGroup
public final void resume(); public final void setDaemon(boolean daemon); public final void setMaxPriority(int pri); public final void stop(); public final void suspend(); public String toString(); Informática III
43
Métodos de ThreadGroup
public void uncaughtException(Thread t, Throwable e); este método se invoca si ocurre una excepción no atrapada Informática III
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.