CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament d’Arquitectura de Computadors (Seminaris de CASO) Autors Sincronización de Threads en Java Josep Joan.

Slides:



Advertisements
Presentaciones similares
CJ02 – Técnicas avanzadas en java 1.4 y 5.0
Advertisements

UNIVERSIDAD PRIVADA SAN PEDRO ESCUELA INGENIERIA CIVIL
2. Manejo de memoria Manejo de memoria estática
Curso de java básico (scjp)
CJ02 – Técnicas avanzadas en java 1.4 y 5.0
Curso de Java Capitulo 7: Continuación Poo Profesor:
EXCEPCIONES UNIDAD 5.
Programación Interactiva Hilos
Lenguaje de programación Java
Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase.
Capitulo 4 Excepciones.
Base de la biblioteca de threads a nivel usuario del proyecto SODIUM.
1.2 Sintaxis del lenguaje Java.
Aplicación del paradigma orientado a objetos
Diseño y programación de
CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament d’Arquitectura de Computadors (apunts de l’assignatura en format transparència) Multithreading and.
Qué pasa cuando varios clientes tratan de conectarse al mismo teimpo a un servidor Una forma es ir atendiéndolos de a uno en un ciclo: como en el programa.
Tema 12: Programación multihilo
7a.1 Silberschatz, Galvin y Gagne ©2003 Sistemas Operativos 6ª edición Capítulo 7: Sincronización de procesos parte a.
HERENCIA.
 son segmentos de código de un programa que se ejecutan secuencialmente de modo independiente de las otras partes del programa.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
10. Hilos Definición y ejecución Thread y Runnable
Java. Threads (Hebras) Los sistemas operativos actuales permiten la multitarea, aunque esta se de tiempo compartido cuando se trabaja con un solo procesador.
Modificadores.
Lic. Rosemary Torrico Bascopé
Java Orientado a Objetos CLASES,OBJETOS Y MÉTODOS
El patrón de diseño Proxy Raúl Heras Alberto Blasco José Manuel Arévalo.
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Tema 6: Clases Antonio J. Sierra.
Tema 10: Interfaces Antonio J. Sierra.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA OCHO THREADS.
1 TEMA 5. Seguridad en Java 1.Introducción a los Controladores de Seguridad 2.Decidir qué Métodos Sobreescribir del SecurityManager 3.Escribir un Controlador.
Un hilo es un único flujo de ejecución dentro de un proceso. Un proceso es un programa ejecutándose dentro de su propio espacio de direcciones. Los.
Semana 5 Subprogramas..
UNIDAD 2 CLASES Y OBJETOS. CLASE Elementos cabecera y cuerpo de la clase. Cabecera: aporta información fundamental sobre la clase en sí y constituye de.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA OCHO THREADS.
Java. Java nació el año 1991, por un par de ingenieros de la Sun Microsystems.
Capitulo # 4 herencia PROGRAMACION III UNIVERSIDAD
Patrones Creacionales
Capítulo 5 - b: Hilos. 4.2 Silberschatz, Galvin and Gagne ©2005 Operating System Concepts – 7 th edition, Jan 23, 2005 Ejemplo de hilos: un applet Un.
CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament d’Arquitectura de Computadors (Seminaris de CASO) Autors Introducción a J2ME Bruno Rodríguez Rodríguez.
INFORMATICA III ESCUELA DE INGENIERIA ELECTRONICA DEPARTAMENTO DE SISTEMAS E INFORMATICA.
 El acceso concurrente a datos compartidos puede dar pie a inconsistencia de datos  Mantener la consistencia de los datos requiere mecanismos para asegurar.
Monitores Mecanismo sincronización de nivel más alto que semáforos Construcción a nivel de lenguaje de programación que controla el acceso a datos compartidos.
Sincronización de Procesos
Monitores Cabudare, noviembre de 2010 Universidad Fermín Toro
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA OCHO THREADS.
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores.
INFORMATICA III ESCUELA DE INGENIERIA ELECTRONICA DEPARTAMENTO DE SISTEMAS E INFORMATICA.
Teoría de Sistemas Operativos Sincronización Procesos Departamento de Electrónica 2º Semestre, 2003 Gabriel Astudillo Muñoz
INFORMATICA III ESCUELA DE INGENIERIA ELECTRONICA DEPARTAMENTO DE SISTEMAS E INFORMATICA.
Metodología de Programación Ayudantía 5 lelagos.ublog.cl 2009.
TEMA 2. Programación Concurrente
Administrador de procesos
Algoritmos y programación 3 - cátedra Fontela Concurrencia.
Teoría de Sistemas Operativos Departamento de Electrónica 2º Semestre, 2002 Gabriel Astudillo Muñoz
Programación Orientada a Objetos
Informática III 2009 Ing. Estela D'Agostino 1 Programación secuencial vs programación concurrente Pascal, C, Fortran, Cobol Secuenciales único hilo de.
Teoría de Sistemas Operativos Sincronización Procesos
Threads en Java  Threads: programas multitarea  Creación de threads  Ciclo de vida de un thread  Sincronización.
CRUCIGRAMA HORIZONTALES: VERTICALES:
CONCEPTOS.
Hilos y Multihilos Un thread (hilo, flujo de control del programa) representa un proceso individual ejecutándose en un sistema. A veces se les llama.
Hilos Java Profesor Elian Rojas Berrocal
También es conocido como proceso ligero. Es una entidad básica de utilización de CPU y esta formado por un contador de programa, algunos registros y una.
Clases “ Es una Abstracción de un elemento del mundo real ”
Programación orientada a objetos La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa objetos.
Métodos en Java. Estructura de un programa en Java ► La relación con la vida misma la podemos ver en el siguiente comentario: Imaginemos que dos clases.
Tema 1: Concurrencia con Java
Transcripción de la presentación:

CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament d’Arquitectura de Computadors (Seminaris de CASO) Autors Sincronización de Threads en Java Josep Joan Ribas Prats Sergio Liminiana Bernat

Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 2 Introducción o Los threads o hilos de ejecución son segmentos de código de un programa que se ejecutan secuencialmente de modo independiente de otras partes del programa. o Un proceso puede estar constituido por uno o mas threads. o Un thread esta compuesto por : –Una CPU virtual –El código que ejecuta el procesador –Los datos sobre los que trabaja el código o Dos threads comparten código si ejecutan código de objetos que pertenecen a la misma clase.

Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 3 Introducción (II) o Los datos pueden ser o no compartidos por diferentes threads. Eso ocurre cuando tienen acceso a un objeto común.

Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 4 Para qué? o Los threads se utilizan para aislar y coordinar tareas. o Sin el uso de threads hay aplicaciones que son casi imposibles de programar: Las que tienen tiempos de espera importantes entre etapas Las que consumen muchos recursos de CPU e impiden que el procesador atienda simultáneamente otros eventos o peticiones del usuario

Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 5 Tipos. o Tipos de threads que pueden aparecer en una aplicación: Threads completamente independientes, que realizan tareas no relacionadas. Éste es el caso más sencillo y no requiere ninguna programación especial. Threads que trabajan en una misma tarea, pero sin interferir ni intercambiar relación entre ellos. Por ejemplo, threads que colaboran en el producto de dos matrices ocupándose cada una de ellas de calcular ciertas filas de la matriz producto.

Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 6 Tipos(II). Threads que utilizan recursos de modo mutuamente exclusivo, aunque sin tener que coordinar sus actividades. Por ejemplo, threads que actualizan o leen registros de una base de datos y que no pueden actuar simultáneamente. Threads que deben de coordinar sus actividades, de modo que una de ellas no puede empezar o continuar hasta que la otra haya realizado su tarea. Los ejemplos más típicos son los de tipo productor-consumidor, en el que este último tiene que esperar para realizar su función a que el productor le haya preparado los datos y le avise de esa circunstancia.

Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 7 Creación. o Hay dos modos de conseguir threads en Java. Una es extender la clase Thread, la otra es implementando la interface Runnable.

Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 8 Creación extendiendo la clase Thread o El nuevo thread se crea extendiendo la clase Thread y redefiniendo el metodo run(). o Exemple : public class MyThread extends Thread{ public void run(){ // código propio del thread } public static void main(){ Thread t= new MyThread(); t.start; }

Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 9 Creación implementando la interface Runnable o El constructor de la clase Thread recibe un argumento que debe ser una instancia de una clase que implementa la interface Runnable, implementando el metodo run().

Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 10 Creación implementando la interface Runnable(II) o Ejemplo: public class ThreadTest{ public static void main(String args[] { Xyz r = new XYZ(); Thread t = new Thread( r ); } class Xyz implements Runnable { int i; public void run(){ while (true){ System.out.println(“Hello” + i++); if (i==50) break; }

Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 11 Qué mecanismo usar? o Implementar la interfaz Runnable: Mejor diseño orientado a objetos. La clase thread solo deberá ser extendida cuando se pretenda modificar o extender el comportamiento de dicho modelo de ejecución. Herencia simple. Debido a la tecnología de Java no es posible extender una clase cuando ésta ya ha sido extendida a la clase thread o Extender la clase Thread : Código más simple. En el método run la referencia this apunta a la instancia del thread actual

Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 12 Estados de un thread. New RunnableRunning Otherwise Blocked Dead Blocked in objects lock pool Blocked in objects wait() pool start() run() wait() notify() interrupt() sleep() join() sleep() timeout thread join() interrupt() synchronized() lock available

Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 13 Estados de un thread (II).  Nuevo (New): El thread ha sido creado pero no inicializado (no se ha ejecutado todavía el método start()), por lo que todavía no puede ejecutarse.  Ejecutable (Runnable): El thread puede estar ejecutándose, siempre y cuando se le asigne tiempo de CPU. (Scheduler)

Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 14 Estados de un thread (III).  Muerto (Dead): La forma habitual de morir en un thread es finalizando de ejecutar el método run(), bien por terminar su tarea, bien dejando de cumplir una condición chequeada en dicho método.  Bloqueado (Blocked o Not Runnable): El thread podría estar ejecutándose, pero hay algo que lo impide, como por ejemplo una operación de E/S. Mientras un thread esté en este estado, no se le asigna tiempo de CPU.

Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 15 Planificación de threads. o La planificación de ejecución de threads se basa en el modelo de prioridades y no utiliza el modelo de segmentación por segmentos de tiempo. o Un thread continuará ejecutandose en la CPU hasta pasar a un estado que no le permita seguir en ejecución. Se debe asegurar que el thread permite la ejecución de otros threads, esto se puede conseguir mediante llamadas al método sleep().

Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 16 Planificación de threads(II). o Ejemplo: public class Xyz implements Runnable { public void run() { While(true){ // código del propio thread try{ // permitimos la ejecución de otros threads Thread.sleep(10); } catch(InterruptedException e) { // otro thread despierta a este thread } –Los threads pueden invocar al método interrupt() de otros threads para reanimarlos.

Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 17 Planificación de Threads(III). o Otro método para permitir la ejecución de otros threads es el método yield() que permite la ejecución de otro thread con la misma prioridad. o Las prioridades viene definidas por variables miembro de la clase Thread, que toman valores int entre unos valores MAX_PRIORITY y MIN_PRIORITY (entre 1 y 10), siendo la prioridad por defecto NORM_PRIORITY(5).

Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 18 Planificación de Threads(IV). o Cuando se crea un thread, hereda la prioridad del thread que la ha creado. o Para modificar la prioridad de un thread se utiliza el método setPriority(int), y para obtener su valor el método int getPriority(). o El algoritmo de distribución de recursos en Java: Es preemptive, es decir, el sistema ejecuta el thread de mayor prioridad entre todos los que son Runnable (excepcionalmente puede ejecutarse otro thread para evitar que algunos procesos “duerman” indefinidamente). Si varios threads en estado Runnable tienen la misma prioridad se van ejecutando sucesivamente mediante permutación cíclica

Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 19 Planificación de Threads(V). o Threads Daemon –Los threads daemon llamodos servicios, se ejecutan con prioridad baja y proporcionan un servicio básico a un programa o programas cuando la actividad de la máquina es reducida. –Un ejemplo de thread demonio que está ejecutándose continuamente es el recolector de basura ( garbage collector ). E –Un thread puede fijar su indicador de demonio pasando un valor true al método setDaemon(). Si se pasa false a este método, el thread será devuelto por el sistema como un thread de usuario. No obstante, esto último debe realizarse antes de que se arranque el thread ( start() ).

Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 20 Control básico de threads. o Finalización del la ejecución de un thread. –Cuando un thread acaba su ejecución y es finalizado, no puede volver a ser ejecutado. –Podemos detener un thread utilizando un flag que utiliza un metodo run que debe terminar la ejecución. r.stopRunning() // r instancia de una clase que implementa runnable

Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 21 Control básico de threads (II). o Verificación del estado thread isAlived() boolean isAlived(). Devuelve true si el thread ha sido inicializado con start y no ha terminado el ciclo de ejecución. o Bloqueo de threads. sleep(). Permite detener un thread durante un determinado tiempo join(). Bloquea el thread actual, hasta que el thead sobre el cual ha sido ejecutado el join termina.

Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 22 Sincronización. o Existen muchas situaciones interesantes donde ejecutar threads concurrentes que compartan datos y deban considerar el estado y actividad de otros threads. Este conjunto de situaciones de programación son conocidos como escenarios 'productor/consumidor'; donde el productor genera un canal de datos que es consumido por el consumidor. Como los threads comparten un recurso común, deben sincronizarse de alguna forma.

Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 23 Sincronización. Uso de synchronized o Cada objeto tiene un “flag de bloqueo” –La palabra clave synchronized permite controlar el flag para activar accesos exclusivos al objeto y cada objeto tendrá asociada una cola de espera. Se pueden declarar bloques de código synchronized. synchronized ( variableCompartida ) { // acceso al recurso } Métodos synchronized public synchronized void nomMetode () { // acceso al recurso }

Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 24 Sincronización. Uso de synchronized o El flag de bloqueo de un objeto se libera : –Cuando el thread termina el bloque de código synchronized –Cuando le bloque de código synchronized lanza una excepción. o Deadlock –Dos threads esperando un flag de bloqueo –No se detecta –Se puede evitar: Decidir el orden de obtención de los bloqueos Seguir con rigurosidad ese orden Liberar los bloqueos en orden inverso

Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 25 Sincronización. Comunicación entre threads o wait() y notify() –Si un thread ejecuta una llamada wait() sobre un objeto x pausará su ejecución hasta que otro thread ejecute la llamada a notify() mediante el mismo objeto x. –Para poder ejecutar tanto un wait() como un notify() el thread debera disponer del flag de bloqueo, es decir, solo podrán ser ejecutadis desde un bloque de codigo synchronized. –Listas de espera o “pools” Cuando un thread ejecuta wait() se libera el flag de bloqueo y es colocado en la lista de espera o pool del objeto (wait pool) Al ejecutar notify() un thread abitrario es movido de la lista de espera hacia una lista de threads que esperan por el flag de bloqueo (lock pool). notifyAll() despierta a todos los threads.

Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 26 Sincronización. Monitores o Cuando un método synchronized se ejecuta adquiere un monitor sobre el objeto. Cuando un thread tiene el monitor del objeto ningún otro thread podrá ejecutar un metodo synchronized. o Un thread sale del monitor cuando libera el flag de bloqueo del objeto.

Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 27 Sincronización. Monitores(II). o Un ejemplo típico del uso de monitores es el esquema de productor/consumidor. o Aquí el productor y el consumidor son threads que acceden a la región critica que es la tuberia o buffer. Esta tiene que tener sus métodos protegidos mediante synchronized y tiene que hacer que los threads se comuniquen mediante wait(), notify() y notifyAll().

Seminaris de CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament. d’Arquitectura de Computadors - UPC 28 Bibliografia o Dossier Programación Java (Tomo 2) PUE o o