Sincronización de Threads

Documentos relacionados
Arquitecturas cliente/servidor

I. Introducción a la programación orientada a objetos y al lenguaje JAVA Colegio Reuven Feuerstein --Javier Navarro

Applets. Un applet es: desde el punto de vista de código Java, un programa diseñado para ser ejecutado en el contexto de una página web.

Applets. Programación de Applets. Cómo hacer un applet Java. Cómo se ejecuta un applet Java. Programación Orientada a Objetos Facultad de Informática

1. Cómo hacer un applet? Implementación de un Applet (awt) Ejecución de los Applets Hacer el archivo HTML con los siguientes

Guillermo Román Díez

Introducción al lenguaje JAVA

JAVA: Applets. Diseño de aplicaciones web.

3URJUDPDFLyQ-DYD. 3UiFWLFD. -DYLHU*DUFtDGH-DOyQÂ -RVp,JQDFLR5RGUtJXH] $OIRQVR%UD]iOH]Â $OEHUWR/DU]DEDOÂ -HV~V&DOOHMDÂ -RQ*DUFtD

Programación concurrente

Segundo Certamen Tiempo: 100 minutos

Guía práctica de estudio 12: Hilos

Universidad de Sevilla. Área de Ingeniería Telemática. Área de Ingeniería Telemática. Universidad de Sevilla. Fundamentos de Telemática

Applets y Aplicaciones

Desarrollo de aplicaciones gráficas

UPM Concurrencia en Java

Programación concurrente en Java

I. Introducción a la programación orientada a objetos y al lenguaje JAVA Colegio Reuven Feuerstein Javier Navarro

Estructuras de control selectivas

2. Indica cuál de las siguientes afirmaciones es cierta:

Programación concurrente y semáforos en Java

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

Java es un lenguaje desarrollado por la compañía informática Sun Microsystems, una de las mayores del sector.

Problema 1 (2 puntos)

Ejercicios de Hilos. Índice

Normalmente, los programas son ejecutados de forma secuencial. Único flujo de control

Concurrencia Monitores. Guillermo Román Díez

Universidad Autónoma de Baja California Facultad de Ingeniería Apuntes de Programación Orientada a Objetos I

Técnicas de desarrollo

Creación de Applets Simples

Formato para prácticas de laboratorio

Tema 6. Threads: programas multitarea

Unidad V. Ya veremos qué poner en "algunas_palabras" y "algo_más", por ahora sigamos un poco más.

III. Desarrollo de aplicaciones con manejo de datos en la memoria Reuven Feuerstein Javier Navarro

Laboratorio de Aplicaciones Telemáticas (Curso 2009/2010)

Laboratorio de Aplicaciones Telemáticas (Curso 2009/2010)

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

El entorno de desarrollo eclipse 3.0.1

Universidad de los Andes Ingeniería de Sistemas y Computación

Unidad IV: Programación concurrente (MultiHilos) 4.1. Concepto de hilo

PARTE II PROGRAMACION CON THREADS EN C

Herramientas y Lenguajes de Programación

18. Interfaces Declaración de una interfaz

Programación de Eventos

Ingeniería del Software de Gestión

Programación Java Curso C Draw

06/06/2017. Hay varios niveles para expresar concurrencia: Nivel de Instrucción Nivel de Sentencia Nivel de Unidad Nivel de Programa

Laboratorio I Java Threads (Silberschatz Galvin)

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

Introducción... 1 Qué es Java?... 1 Compilando a Bytecode... 1 Usando jgrasp Para Hacer el Trabajo Sucio... 5 El Entorno de jgrasp...

Conocimientos previos

Programación Concurrente y Paralela. Unidad 1 Introducción

Lenguaje Orientado por Objetos Simple, Poderoso y Fácil de aprender Robusto Interactivo Arquitectura neutral Interpretado y de alto desempeño

Agosto de 2012 TUTORIAL PSEINT. Servicio Nacional de Aprendizaje SENA Jordan Angulo Canabal

Programación interactiva. Oscar Bedoya

Patrones de Diseño. Patrón estructural Composite. Técnicas de Programación - Curso 2007/08

Computación Web (Curso 2013/2014)

UNIDAD III.- Programación Concurrente

Ejemplo. class SiNoThread extends Thread { private String SiNo; static int Contador = 0; public SiNoThread(String s) { super(); SiNo = s; }

Programación conducida por eventos y Applets como ejemplo de Frameworks. Agustín J. González ELO-326. Seminario II 2do. Sem. 2001

Introducción a la programación orientada a objetos y al lenguaje JAVA Colegio Reuven Feuerstein --Javier Navarro

Diseño de tipos Igualdad, representación, código, copia y relación de orden

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

Lenguajes de Script. Qué son los Lenguajes de Script?

Tema 7. Construcción de Applets en Java

1

Java y JVM: programación concurrente. Adolfo López Díaz

Lenguajes de Programación Curso Práctica 3. Crear y utilizar paquetes. Crear una jerarquía de clases.

Apuntes de Java. Tema 9: Applets. Uploaded by Ingteleco

Concurrencia. Primitivas IPC con bloqueo

Programación Concurrente Recopilación de teoría referente a la materia

PROGRAMACIÓN EN JAVA

Programación Orientada a Objetos en Java

Programación concurrente

Java Applets como ejemplo de Framework. Agustín J. González ELO-329

Práctica 2: Eclipse como Entorno Integrado de Desarrollo e Introducción al manejo de excepciones.

Java Applets como ejemplo de Frameworks. Agustín J. González ELO-329

PROGRAMACIÓN CONCURRENTE

Tema 1: Introducción a los Sistemas Operativos

Diferentes Perspectivas de un Ordenador

dit Programación concurrente Sincronización condicional UPM

BENEMERITA UNIVERSIDADD AUTONOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACIÓN LICENCIATURA EN CIENCIAS DE LA COMPUTACIÓN

import java.applet.*; import java.awt.*; import java.awt.event.*;

Sesión 2: Introducción a Java

Examen de Métodos de Programación Ingeniería Informática Primera Parte

Programación orientada a objetos: Lenguajes, Metodologías y Herramientas

Patrones de Diseño. Patrón estructural Composite. Técnicas de Programación - Curso 2008/09 (Esther Guerra Sánchez)

Unidad 3 Sistemas con memoria común

Ejecución de hebras. En realidad, todas las aplicaciones escritas en Java son aplicaciones multihebra (recuerde el recolector de basura).

Metodología de la Programación

Semana 09. Prof. MSc. Luis Diego Sancho Fallas UAM

DPOO, CPM 1, Curso Última modificación: 9/03/09

Práctica 4 Concurrencia en Java

IC Programación Orientada a Objetos I. Programación de Interfaces Gráficas de Usuario (GUI) 2

Federico Peinado

Examen de Programación II (Ingeniería Informática)

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

Capítulo 3. Introducción a la programación. Continuar

Transcripción:

Sincronización de Threads Herramientas y Lenguajes de Programación Universidad de La Laguna Programa de Doctorado de Física e Informática Escuela Técnica Superior Superior de Ingeniería Informática Dpto. Sistemas Informáticos y Computación 2004-2005 Resumen El objetivo de esta sesión es mostrar el modo de funcionamiento de los distintos tipos de programas Java. Además se introducen los threads (hilos) y trabaja con los principios básicos de los mismos: su sincronización y secuencialización. 1. Ejemplo de aplicación La programación se vuelve un poco más compleja cuando se tiene un programa con threads. Considérese la siguiente descripción aparentemente sencilla: Los threads A y B comparten un dato, contador. El thread A efectúa repetidamente algunos cálculos que producen un entero y lo coloca en el contador. El thread B obtiene repetidamente el texto del contador y lo utiliza para sus propios cálculos. Cuando el programa esté en ejecución, el sistema alterna la ejecución de A y B. La forma en que ocurre esto varía de un Sistema Operativo a otro y está completamente fuera del control del programador. Es posible que el sistema ejecute un thread hasta terminarlo, antes de iniciar el otro; que ejecute tres instrucciones de un thread antes de hacer lo mismo con una del otro, e incluso que deje un thread en medio de una instrucción, lo suspenda y empiece con el otro. Una vez adevertido que es imposible suponer nada acerca del orden de ejecución de dos o más threads, aparecen los siguientes escenarios: 1. El thread A se ejecuta parcialmente en la actualización del contador y luego la ejecución cambia a B. El resultado de B puede recibir basura cuando trata de inspeccionar el contador. 2. El thread A escribe nueva información en el contador antes de que B inspeccione el valor antiguo. Este último se pierde. 1

Herramientas y Lenguajes de Programación 04-05 2 3. El thread B recibe un valor y luego accede a contador de nuevo antes de que A haya generado un nuevo valor. Se utiliza dos veces el valor antiguo. El escenario 1 requiere exclusión mutua, en que no permite que dos threads tengan acceso simultáneo al recurso compartido contador. Los escenarios 2 y 3 requieren secuencialización, en que cada thread debe esperar a que el otro termine de usar el recurso compartido. Es importante señalar que estos escenarios son problemáticos sólo porque los threads A y B tienen acceso al objeto contador. Si el código que ejecutan A y B no hiciera referencia a un objeto compartido, estos subprocesos podrían ejecutarse en el orden que decida el Sistema Operativo y dicho orden no tendría efecto en el resultado del programa. Figura 1: Ejemplo del Productor/Consumidor La aplicación PCTest.java contiene la definición de una aplicación Productor/Consumidor en la que se instancian dos objetos: uno de tipo Productor y otro de tipo Consumidor. Estos objetos son threads que se encargan uno de poner un valor y el otro de recogerlo de un objeto de tipo Mostrador. El Productor genera un entero entre 0 y 9, lo almacena en el mostrador y lo imprime. El Consumidor al contrario, consume todos los enteros del mostrador (que es exactamente el mismo objeto en el que el productor coloca los enteros) tan pronto como están disponibles. Así pues, el productor y el consumidor de este ejemplo comparten los datos a través del objeto de tipo Mostrador (figura 1). El primer paso para manipular una aplicación Java es compilarla ejecutando en la línea de comandos la instrucción >javac PCTest.java Es importante que el nombre del fichero que contiene el código coincida exactamente con el nombre de la clase que se declara como pública. Al realizar este paso se obtiene el siguiente conjunto de ficheros Mostrador.class, Productor.class, Consumidor.class, PCTest.class. Para ejecutar la aplicación se escribe en la línea de comandos >java PCTest

Herramientas y Lenguajes de Programación 04-05 3 2. Ejemplo de applet El código que aparece a continuación muestra la implementación en Java del programa que muestra en la ventana principal del navegador la frase Hola Mundo en Java : /** * Applet Hello World */ import java.applet.applet; import java.awt.graphics; public class AppletSimple extends Applet{ public void paint(graphics g){ g.drawstring("hola Mundo en Java", 50, 25); El primer paso para manipular un applet Java es compilarlo ejecutando en la línea de comandos la instrucción >javac AppletSimple.java Al realizar este paso se obtiene una fichero AppletSimple.class. El fichero.class resultante de la compilación, se ha de incrustar en un fichero para ser ejecutado por un navegador. En este caso las etiquetas a utilizar son <APPLET> y </APPLET>. El siguiente código HTML contine la estructura de la etiqueta para el ejemplo que nos ocupa (está almacenado en un fichero con nombre html.html). <html> <head> <title> Un applet simple </title> </head> <body> <p> A continuación está la salida del programa </p> <applet code="appletsimple.class" width="300" height="100"> No hay disponible un intérprete de Java </applet> </body> </html> Nótese que en el atributo asociado code de la etiqueta <APPLET> se ha especificado AppletSimple.class y no AppletSimple.java. Finalmente, cuando se abre con un navegador el fichero html.html se obtiene el resultado que se muestra en la figura 2.

Herramientas y Lenguajes de Programación 04-05 4 Figura 2: Ejecución del applet en un navegador El paquete de desarrollo que proporciona SUN también ofrece una herramienta de visualización. Para usarla se ha de ejecutar: >appletviewer html.html Figura 3: Ejecución del applet con appletviewer La herramienta appletviewer sólo muestra el applet. Ignora el código HTML en el que está incrustado (véase la figura 3). 3. Ejercicios 1. Compile y ejecute la aplicación Productor/Consumidor descrita en la primera sección. 2. Añada al código de la aplicación Productor/Consumidor las sentencias necesarias para que los dos threads que se ejecutan pasen al estado de dormido durante un intervalo aleatorio de tiempo.

Herramientas y Lenguajes de Programación 04-05 5 3. Implemente los cambios necesarios para que el programa admita la creación de más de un thread productor y más de un thread consumidor. Ejecute el nuevo programa lanzando varios productores y varios consumidores. 4. Implemente los cambios necesarios para que el programa se pueda ejecutar como un applet. Para ello: extienda la clase TextField del paquete java.awt de manera que proporcione los métodos sincronizados setint() y getint() que permitan poner y recoger un entero en el campo de texto. El Consumidor ha de recoger los valores del campo de texto y sumarlos. El Productor generará los enteros impares sucesivos y los coloca en el campo de texto compartido. El Productor indica el final de su tarea colocando el valor -1 en el campo de texto, mientras que el Consumidor utiliza el -1 como señal para informar de la suma. Finalmente se utilizan las tres clases anteriores para crear el applet que contiene un campo de texto extendido y un botón que al hacer click en él lanza los threads. public class Test extends Applet implements ActionListener { private IntField display; private Button startbutton; private Productor p; private Consumidor c; public void init() { display = new IntField(); startbutton = new Button ("Start"); p = new Productor (display); c = new Consumidor (display); add (display); add (startbutton); startbutton.addactionlistener(this); public void actionperformed(actionevent e) { p.start(); c.start();