La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Informática III - 20031 Concurrencia zEn el mundo real pasan muchas cosas a la vez yCon varias computadoras se pueden ejecutar múltiples programas yCon.

Presentaciones similares


Presentación del tema: "Informática III - 20031 Concurrencia zEn el mundo real pasan muchas cosas a la vez yCon varias computadoras se pueden ejecutar múltiples programas yCon."— Transcripción de la presentación:

1 Informática III Concurrencia zEn el mundo real pasan muchas cosas a la vez yCon varias computadoras se pueden ejecutar múltiples programas yCon una sola computadora se pueden simular la ejecución paralela de varias actividades xmúltiples hilos de ejecución comparten el uso de un procesador

2 Informática III zJava soporta la ejecución paralela de varios threads (hilos) ymúltiples threads ejecutándose en una máquina comparten recursos (memoria) ymúltiples threads ejecutándose en varias máquinas necesitan capacidades de comunicación Concurrencia

3 Informática III zLa concurrencia es natural en OO yAda y Simula 67 ya soportaban concurrencia yJava es único entre los lenguajes de propósitos generales que pone primitivas de concurrencia a disposición del programador Programación concurrente OO

4 Informática III Aplicaciones concurrentes zDescargas de grandes archivos de la WWW zRecolección de basura de Java (garbage colector)

5 Informática III Creacion de threads zCrear un thread zConfigurarlo : nombre, prioridad,etc. zEjecutarlo : yinvocar el método start, yéste invoca al método run ycuando run devuelve el control el thread ha terminado

6 Informática III Un thread se puede crear: zextendiendo una clase de Thread zimplementando la interface Runnable Creacion de threads

7 Informática III La clase Thread zUn hilo de ejecución de Java (Java.lang) zMétodos: yrun() activa el thread ystart () activa run y vuelve al llamante yjoin () espera por la terminación ( timeout opcional) yinterrupt () sale de un wait, sleep o join yisInterrupted () yyield () ystop (), suspend (), resume ()

8 Informática III zMétodos estáticos: ysleep (milisegundos) ycurrentThread () zMétodos de la clase Object que controlan la suspensión del Thread actual: ywait() (equivale a 0 milisegundos) ywait (milisegundos) ynotify ()notifyAll() La clase Thread

9 Informática III Constructores de Thread zpublic Thread ( String threadName) yconstruye un thread cuyo nombre es threadName zpublic Thread () yconstruye un thread cuyo nombre es Thread concatenado con un dígito (Thread1, Thread2)

10 Informática III Inicio de la ejecución de un hilo zSe invoca al método start zEste invoca a run y devuelve el control al llamante zEl invocador se ejecuta en paralelo con el thread

11 Informática III Estados de hilos: ciclo de vida nacidolisto ejecución muerto start dormidosuspendidoen espera bloqueado Solicitud E/S Completar E/S ResumeExpìra sleep sleepsuspend Termina quantum notify notifyAll wait stop completar Asignar procesador

12 Informática III Sincronización Thread bloquea Thread Solo un thread por vez puede acceder a un objeto

13 Informática III Métodos sincronizados zLos métodos que tengan que acceder al mismo objeto se deben sincronizar para lograr el bloqueo. zLa ejecución de dos métodos sincronizados es mutuamente excluyente.

14 Informática III 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; }} Métodos sincronizados

15 Informática III Métodos sincronizados Instancia (bloquean objetos) Clase (bloquean clases)

16 Informática III Métodos synchonized anulados zSi una clase extendida anula un método synchronized, el nuevo método puede o no ser synchronized. zEl método de la superclase continúa siendo synchronized.

17 Informática III Sentencias synchronized zPermite ejecutar código sincronizado sin invocar un método sincronizado sentencia bloqueo

18 Informática III zForma general: xsynchronized (expresión) sentencia zCuando la sincronización se usa en muy pocos lugares. Son más convenientes los métodos sincronizados Sentencias synchronized Objeto a bloquear

19 Informática III Wait y notify zSirven para comunicar los threads entre sí ysynchronized void cuandoCondicion ( ) { while ( ! condicion ) wait ( ); ….hacer lo que sea necesario cuando la condicion sea cierta }

20 Informática III synchronized void cambiaCondicion ( ) { ….cambiar algún valor usado en condición notify ( ) ; // notifyAll ( ) } Wait y notify

21 Informática III zPara que el contenido del objeto sea estable todo debe ocurrir en método synchronized. zCuando se suspende el thread libera en forma atómica el bloqueo del objeto zLa prueba de la condición debe estar siempre en un bucle Wait y notify

22 Informática III zpublic final void wait (long timeout) throws InterruptedException zpublic final void wait (long timeout, int nanos) throws InterruptedException zpublic final void wait () throws InterruptedException Wait

23 Informática III Notify zpublic final notify ( ) zpublic final notifyAll ( )

24 Informática III Prioridades De Los threads zTodo thread en Java tiene una prioridad en el intervalo : yThread.MIN_PRIORITY( constante que vale 1 ) yThread.MAX_PRIORITY( constante que vale 10 ) yThread.NORM_PRIORITY ( constante que vale 5 )

25 Informática III Manejo de la Concurrencia zEjecución de un hilo hasta que termine o se bloquee (actividades de E/S) zEjecución de un hilo por asignación de quantum (cantidad de tiempo)

26 Informática III Planificación de threads zMantener un hilo de máxima prioridad ejecutándose en todo momento, de acuerdo a la forma en que maneje la concurrencia. zLa aparición de hilos de alta prioridad puede posponer indefinidamente la ejecución de hilos de prioridades ba.jas

27 Informática III zLa prioridad de un Thread se puede ajustar con el método : setPriority ( int prioridad ) 1< prioridad < 10 zLa prioridad de un Thread se puede obtener con el método: getPriority ( ) Planificación de threads

28 Informática III zUn 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 ( ) Planificación de threads

29 Informática III zUn hilo se ejecuta hasta que ocurre alguna de las situaciones siguientes: ymuere. yse bloquea para entrada/salida. yInvoca a sleep. yinvoca a yield. yes desalojado por un hilo de mayor prioridad. yhasta que expira su quantum. Planificación de threads

30 Informática III zUn hilo con prioridad más alta que el que se está ejecutando, puede desalojar a éste si: ysi invoca a resume. ysi se acaba el período de sleep. ysi se completa la E/S por la cual se bloqueo. ysi se invoca notify o notifyAll para un hilo que había invocado wait. Planificación de threads

31 Informática III Sincronización de hilos zJava usa monitores para la sincronización de hilos. zTodo objeto con métodos synchronized es un monitor. zEl monitor sólo permite a un hilo por vez ejecutar un método synchronized sobre el objeto.

32 Informática III zEjemplo productor / consumidor xDos hilos comparten una celda de memoria, uno coloca datos en la celda y el otro consume esos datos. xSin 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. Sincronización de hilos

33 Informática III zEjemplo: Sincronización de hilos

34 Informática III Interface Runnable zOtra forma de crear un thread es implementando la interface runnable, que nos provee el metodo run, para implementarlo en el thread.

35 Informática III zEjemplo: Interface Runnable

36 Informática III Grupos de hilos zPermite identificar varios hilos como pertenecientes a grupo de hilos. zLa clase ThreadGroup contiene los métodos necesarios para crear y manipular grupos de hilos. zEl grupo tiene un nombre único. zLos grupos se pueden tratar colectivamente.

37 Informática III zTiene dos constructores: ypublic ThreadGroup (String cadenanombre) construye un ThreadGroup cuyo nombre es cadenanombre ypublic ThreadGroup ( ThreadGroup padre, String cadenanombre) construye un ThreadGroup hijo de padre, llamado cadenanombre Grupos de hilos

38 Informática III zLa 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) Grupos de hilos

39 Informática III Métodos de ThreadGroup public int activeCount(); public int activeGroupCount(); public final void checkAccess(); public final void destroy();

40 Informática III public int enumerate(Thread list[]); public int enumerate(Thread list[], boolean recurse); public int enumerate(ThreadGroup list[]); public int enumerate(ThreadGroup list[], boolean recurse); Métodos de ThreadGroup

41 Informática III 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); Métodos de ThreadGroup

42 Informática III 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(); Métodos de ThreadGroup

43 Informática III public void uncaughtException(Thread t, Throwable e); Métodos de ThreadGroup


Descargar ppt "Informática III - 20031 Concurrencia zEn el mundo real pasan muchas cosas a la vez yCon varias computadoras se pueden ejecutar múltiples programas yCon."

Presentaciones similares


Anuncios Google