Concurrencia En el mundo real pasan muchas cosas a la vez

Slides:



Advertisements
Presentaciones similares
Curso de java básico (scjp)
Advertisements

CJ02 – Técnicas avanzadas en java 1.4 y 5.0
UNIVERSIDAD PRIVADA SAN PEDRO ESCUELA INGENIERIA CIVIL
2. Manejo de memoria Manejo de memoria estática
Bioestadística y su rol en la Salud Pública
TOMOGRAFÍA POR EMISIÓN DE POSITRONES
CJ02 – Técnicas avanzadas en java 1.4 y 5.0
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.
Curso de Java y Aplicaciones Web
Base de la biblioteca de threads a nivel usuario del proyecto SODIUM.
CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament d’Arquitectura de Computadors (apunts de l’assignatura en format transparència) Multithreading and.
Objetos y Clases en Java
Programación Orientada a Objetos en Java
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.
 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.
Java Orientado a Objetos CLASES,OBJETOS Y MÉTODOS
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.
Universidad de Tarapacá Fundamentos Lenguaje y Programación Rodrigo Cornejo Mejías Jonathan Cea Chávez Marcelo Gómez Gonzales.
Tema 6: Clases Antonio J. Sierra.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA OCHO THREADS.
SCJP Sun Certified Programmer for Java 6
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.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA OCHO THREADS.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
Unidad III Administración de procesos
CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament d’Arquitectura de Computadors (Seminaris de CASO) Autors Sincronización de Threads en Java Josep Joan.
Java. Java nació el año 1991, por un par de ingenieros de la Sun Microsystems.
Capitulo # 4 herencia PROGRAMACION III UNIVERSIDAD
Introducción a Java (2ª parte) - excepciones, colecciones, i/o, … -
Profesor: Rodrigo Sanhueza Figueroa
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.
Capítulo 9: THREADS Carlos Oñate Bravo. THREADS Start New Threads lRecognize Thread States and Transitions Use Object Locking to Avoid Concurrent Access.
Animación usando Threads (lógica) Tema 10. Threads Definición: Un thread es un flujo secuencial de control dentro de un programa. Definición: Un thread.
INFORMATICA III ESCUELA DE INGENIERIA ELECTRONICA DEPARTAMENTO DE SISTEMAS E INFORMATICA.
Applets CONTENIDO ¿Que es un applet? Lo básico de un applet Ciclo de vida de un Applet Las etiquetas de HTML Pasando información a los applets.
Herramientas de polimorfismo y herencia en C++
Gestión de procesos Sistemas Operativos Edwin Morales
Programación secuencial vs programación concurrente
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.
Paquetes e interfaces.
INFORMATICA III ESCUELA DE INGENIERIA ELECTRONICA DEPARTAMENTO DE SISTEMAS E INFORMATICA.
TEMA 2. Programación Concurrente
Administrador de procesos
Informatica II1 Clases Extendidas La clase extendida hereda los campos y métodos de la clase que ha sido extendida. La clase original se conoce como superclase.
Algoritmos y programación 3 - cátedra Fontela Concurrencia.
Informática III 2009 Ing. Estela D'Agostino 1 Programación secuencial vs programación concurrente Pascal, C, Fortran, Cobol Secuenciales único hilo de.
Unidad 2 – Gestión de Procesos
Threads en Java  Threads: programas multitarea  Creación de threads  Ciclo de vida de un thread  Sincronización.
UTFSM - Sistemas Operativos
CRUCIGRAMA HORIZONTALES: VERTICALES:
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
Herencias Conceptos básicos i
Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Práctica 3.
Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Práctica 4 Versión Diseño de tipos Igualdad, representación, código,
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.
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
Tema 1: Concurrencia con Java
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
Paso de parámetros Diseño de programas iterativos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 7 Versión.
Transcripción de la presentación:

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 - 2003

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 - 2003

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 - 2003

Aplicaciones concurrentes Descargas de grandes archivos de la WWW Recolección de basura de Java (garbage colector) Informática III - 2003

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 - 2003

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 - 2003

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 - 2003

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 - 2003

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 - 2003

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 - 2003

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 - 2003

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

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 - 2003

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 - 2003

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

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 - 2003

Sentencias synchronized Permite ejecutar código sincronizado sin invocar un método sincronizado bloqueo sentencia Informática III - 2003

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 - 2003

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 - 2003

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

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 - 2003

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 - 2003

Notify public final notify ( ) public final notifyAll ( ) Informática III - 2003

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 - 2003

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 - 2003

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 - 2003

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 - 2003

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 - 2003

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 - 2003

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 - 2003

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 - 2003

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 - 2003

Sincronización de hilos Ejemplo: Informática III - 2003

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 - 2003

Interface Runnable Ejemplo: Informática III - 2003

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 - 2003

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 - 2003

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 - 2003

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 - 2003

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 - 2003

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 - 2003

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 - 2003

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 - 2003