La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Concurrencia En el mundo real pasan muchas cosas a la vez

Presentaciones similares


Presentación del tema: "Concurrencia En el mundo real pasan muchas cosas a la vez"— Transcripción de la presentación:

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


Descargar ppt "Concurrencia En el mundo real pasan muchas cosas a la vez"

Presentaciones similares


Anuncios Google