Programación concurrente en Java

Documentos relacionados
Threads. La plataforma JAVA soporta programas multhreading a través del lenguaje, de librerías y del sistema de ejecución. Dos.

1 HILOS (THREADS) EN JAVA

TEMA 5: Control de la Concurrencia en Java (API Estándar)

Java nos ofrece la clase Thread y la interfaz Runable que permiten que varios procesos estén funcionando de forma concurrente.

Programación Concurrente en Java: Threads. Ejemplos de programación concurrente. Luis Fernando Llana Díaz. 24 de abril de 2008

Programación Orientada a Eventos

Threads (Hilos de ejecución)

Federico Peinado

Java: Programación Multithread

75-62 Técnicas de Programación Concurrente II 2004 java Threads

MONITORES EN JAVA. Antonio Tomeu Control de la Concurrencia en Java: API Estándar

Concurrencia en Java

Programación Concurrente en Java

PROGRAMACIÓN EN JAVA

Programación Concurrente en Java

Multitarea en Java. Rafa Caballero - UCM

Concurrencia en Java

Monitores Ing. Iván Medrano Valencia

PROGRAMACION CONCURRENTE Y DISTRIBUIDA. III.3 Concurrencia con Java: Sincronización

Programación Concurrente. Curso Java 2012, 2013 Juan Manuel Fernández Peña

Hebras y Sincronización en Java

IMPLEMENTACIÓN DE REDES DE PETRI CON TIEMPO EN JAVA

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Concurrencia en Android LSUB, GYSC, URJC

Java RMI Remote Method Invocation. Invocación Remota de Métodos en Java

BENEMÉRITA UNIVERSIDAD AUTÓNOMA DE PUEBLA EDUCACIÓN MEDIA SUPERIOR

Java RMI. las RPC de Java. Parte I. Luis Fernando Llana Díaz. Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid

Introducción a Java LSUB. 30 de enero de 2013 GSYC

Test : Conteste exclusivamente en una HOJA DE LECTURA ÓPTICA, no olvidando marcar que su tipo de examen es A.

Hilos. Índice. Copyright Dept. Ciencia de la Computación e IA All rights reserved.

Concurrencia en Java

Benemérita Universidad Autónoma del Estado de Puebla

Lenguaje de programación con JAVA

Multitarea En Swing. Varios hilos trabajadores, también conocidos como hilos en segundo plano.

Programación multihebra

2. Estructura de un programa en Java

CONCURRENCIA EN JAVA. Diseño de Sistemas Operativos Avanzados 2000/2001. Pedro Pablo Gómez Martín

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

Sistemas Distribuidos Java RMI (Remote Method Invocation) Alberto Lafuente Mikel Larrea Dpto. ATC, UPV/EHU

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Otras formas de Sincronización en Java

Object 1. Threads en Java

Programación Concurrente y Paralela. P(S) ; sección crítica P(S);

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

PROGRAMACION DISTRIBUIDA

Programación Concurrente y de Tiempo Real Guión de prácticas 8: Monitores en Java (API. Natalia Partera Jaime Alumna colaboradora de la asignatura

1. Visión general de RMI

Tema 7.- Fundamentos de la Programación Orientada a Objetos

(THREADS) Ing. Laura Sandoval Montaño, Ing. Manuel Enrique Castañeda Castañeda PAPIME

PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez

Cliente/Servidor en Java

Benemérita Universidad Autónoma del Estado de Puebla

TEMA 6: API Java para Concurrencia de Alto Nivel

3.9 Patrón Distributed callback

PROGRAMACION DISTRIBUIDA

Arquitecturas cliente/servidor

Programación Java. Práctica 11. Javier García de Jalón José Ignacio Rodríguez Alfonso Brazález Alberto Larzabal Jesús Calleja Jon García

Secretos de la Programación Concurrente

Hilos en Java. Crear un Hilo. Detener un hilo. Fuente:

PROGRAMACION DISTRIBUIDA MobileTracker: Ejemplo de implementación con RMI

Universidad Autónoma de Tlaxcala. M.C. José Juan Hernández Mora. Primera Sesión

en otra máquina exactamente de la misma manera que si se encontrará en la misma máquina

Programación Java. Práctica 12. Javier García de Jalón José Ignacio Rodríguez Alfonso Brazález Alberto Larzabal Jesús Calleja Jon García

Soluciones Ejercicios Tema 3

Derechos de Acceso: COMPOSICION

Tema 4. Excepciones en Java

Práctica 2: Java Remote Method Invocation (RMI)

Si bien Pascal-FC no trae algunas de las características de Pascal como:

Cada examen debe superarse con al menos un 4 para hacer media.

Tema 2. El lenguaje de programación Java (Parte 1)

Sistemas Distribuidos (Capítulo 8 de Distributed Computing de M. L. Liu)

Arquitectura Cliente/Servidor. Invocación de Métodos Remotos RMI: Remote Method Invocation. Llamadas a Métodos Remotos

class Nombre_Clase extends Nombre_SuperClase { cuerpo de la clase extendida }

Práctica 1. Monitores en Java.

Diseño Basado en Componentes. Curso 2008 / 09

CONTENIDO. Serialización. Carga dinamica de stubs RMI AVANZADO. Callbacks. Carga dinámica de Stubs

Introducción a Java LSUB. 15 de enero de 2015 GSYC

Java Vademécum /concurrencia

Por ejemplo, considerando la jerarquía de herencia de Figuras Geométricas de la siguiente figura, es posible hacer uso del concepto de polimorfismo.

PROGRAMACIÓN ORIENTADA A OBJETOS CON JAVA

Capítulo I Definición de concurrencia y exclusión mutua

CAPÍTULO 8. Comunicación y sincronización basada en variables compartidas

APELLIDOS:... NOMBRE:... GRUPO:... NÚMERO DE EXPEDIENTE:...

Este capítulo cubre los siguientes aspectos, de los objetivos del examen de certificación en Java:

Ejercicios de Programación Tema 7. Programación Orientada a Objetos

Patrón Fábrica Abstracta. Julio Ariel Hurtado Alegría Ingeniería de Software II 2015

dit UPM Tema 3: Concurrencia /ejercicios Análisis y diseño de software José A. Mañas

UNIVERSIDAD CARLOS III DE MADRID DEPARTAMENTO DE INGENIERÍA TELEMÁTICA. Daniel Díaz Sánchez

PROGRAMACIÓN ORIENTADA A OBJETOS

Práctica 4: Java Remote Method Invocation (RMI)

Introducción a Java (II) Dr. (c) Noé Alejandro Castro Sánchez

Lección 2: Creando una Aplicación en Java. 1. Estructura del archivo de una clase. 3. Definiendo clases fundamentos

Clase 34. Hilos. Qué es un hilo?

Elementos léxicos del lenguaje de programación Java

Universidad ORT - Arquitectura de Software. Requisitos

Desarrollo de Aplicaciones para Android

Java en 3 horas. Ampliación de Sistemas Operativos. Rodrigo Santamaría

Transcripción:

Diseño Y Aplicaciones de Sistemas Distribuidos Programación concurrente en Java Joan Vila DISCA / UPV Departament d Informàtica de Sistemes i Computadors Universitat Politècnica de València

Threads en Java Indice La clase Thread El interfaz Runnable Sincronización de Threads en Java Monitores en Java: métodos synchronized Los métodos wait y notifyall 23

Threads en Java La clase Thread La cualidad de hilo de ejecución en Java se obtiene por herencia de la clase Thread Creación: realización de subclases de Thread class Reloj extends Thread Código a ejecutar: sobrecargar el método run public void run() {... Otros métodos que se pueden sobrecargar public void start() {... Se ejecuta al arrancar el thread. 24

Threads en Java import java.text.*; import java.util.*; class Reloj extends Thread { int cuenta=0;... public void run() { for (int i = 1; i <= cuenta; i++) { try { sleep(1000); catch (InterruptedException e) { System.out.println(getName() + " : " + (cuenta - i)); System.out.println(getName() + "Riiinnnng!!!"); Concurrent execution accomplished by by inheritance from from the the Thread class class 25

Threads en Java Instanciación e iniciación de Threads public class Relojes { public static void main(string[] args){ new Reloj("MotorOn",10).start(); new Reloj("MotorOff",15).start(); 26

Threads en Java El interfaz Runnable Se utiliza cuando no se puede heredar de la clase Thread por problemas de herencia múltiple. Solución: Implementar Runnable (obliga a sobrecargar run,...) Crear una instancia de Thread y pasarle como agumento el objeto class X extends UnicastRemoteObject implements Runnable { Thread reloj= new Thread(this, "Reloj"); public void run(){ while(this!=null){ f(); try{ Thread.sleep(5); catch(interruptedexception e){ 27

Sincronización de Threads en Java Monitores en Java La sincronización en Java se basa en el concepto de Monitor (de C.A.R. Hoare). TAD: encapsula datos y operaciones. Exclusión mútua en el acceso al monitor: sólo puede haber un proceso activo ejecutando código del monitor. Métodos sincronizados Cuando el control entra en un método sincronizado (synchronized), el thread que lo invocó adquiere el monitor e impide que otros threads puedan ejecutar métodos sincronizados del monitor. 28

Sincronización de Threads en Java Métodos wait y notifyall Existen métodos de la clase Object que permiten realizar esperas condicionales dentro de un monitor. wait() : Suspende el thread hasta que otro thread lo notifica con notifyall() (o notify()). notifyall() : Activa todos los threads suspendidos (con wait()) en el monitor adquirido por el thread que invoca. wait(long timeout) notify() 29

Sincronización de Threads en Java class Producer extends Thread { private CubbyHole cubbyhole; private int number; public Producer(CubbyHole c, int number) { cubbyhole = c; this.number = number; public void run() { for (int i = 0; i < 10; i++) { cubbyhole.put(i); System.out.println("Producer #" + this.number + " put: " + i); try { sleep((int)(math.random() * 100)); catch (InterruptedException e) { 30

Sincronización de Threads en Java class Consumer extends Thread { private CubbyHole cubbyhole; private int number; public Consumer(CubbyHole c, int number) { cubbyhole = c; this.number = number; public void run() { int value = 0; for (int i = 0; i < 10; i++) { value = cubbyhole.get(); System.out.println("Consumer #" + this.number + " got: " + value); 31

Sincronización de Threads en Java class CubbyHole { private int contents; // this is the condition variable. private boolean available = false; public synchronized int get() { while (available == false) { try { wait(); catch (InterruptedException e) { available = false; notifyall(); return contents; public synchronized void put(int value) { while (available == true) { try { wait(); catch (InterruptedException e) { contents = value; available = true; notifyall(); 32

Sincronización de Threads en Java class ProducerConsumerTest { public static void main(string[] args) { CubbyHole c = new CubbyHole(); Producer p1 = new Producer(c, 1); Consumer c1 = new Consumer(c, 1); p1.start(); c1.start(); 33