Laboratorio I Java Threads (Silberschatz Galvin)

Documentos relacionados
Guía práctica de estudio 12: Hilos

Tema 6. Threads: programas multitarea

Arquitecturas cliente/servidor

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

Threads o Hilos. Un thread en JAVA comienza como una instancia de java.lang.thread antes de convertirse en un hilo de ejecución.

Tema 12: Programación multihilo

Guillermo Román Díez

1. Fundamentos. Existen dos tipos distintos de multitarea: BASADA EN PROCESOS

Programación concurrente en Java

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

Programación concurrente en Java. Breve introducción. Miguel Ángel LATRE Dept. de Informática e Ingeniería de Sistemas

Programación concurrente Hebras

Procesamiento paralelo con hilos de Java

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

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

1 HILOS (THREADS) EN JAVA

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

Tema III. Multihilo. Desarrollo de Aplicaciones para Internet Curso 12 13

Programación Orientada a Eventos

dit Programación concurrente Sincronización condicional UPM

Multienhebrado en Java Un toque de sincronización Transporte en Java Ejemplo conjunto

CAPÍTULO III: Programación Concurrente en JAVA I: Programación con hilos

Conceptos Básicos de Concurrencia en Java

Apuntes de Java. Tema 10: Threads. Uploaded by Ingteleco

Revisión del Concepto de Hilo (Thread) API Java parathreads: Marco General. Clase Thread: API Básica. TEMA 3: Creación y Control De Threads en Java

Java Threads. Sistemas Distribuidos Rodrigo Santamaría

Programación Concurrente en Java

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

Fundamentos de los Sistemas Operativos. Tema 2. Procesos José Miguel Santos Alexis Quesada Francisco Santana

Programación concurrente

Programación Concurrente en Java: Threads

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

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

Tema 2: Aplicaciones Multihilo, Cliente Servidor

Tema 4: Control del flujo de ejecución: Excepciones y Threads. Programación Orientada a Objetos. Marcos López Sanz

Práctica #0. Factoriales con Threads en Java. Pepper Pots (A ), Anthony Stark (A ) 18 de enero, 2017.

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

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

Federico Peinado

EXCLUSIÓN MUTUA ENTRE HILOS. TEMA 5: Control de la Concurrencia en Java (API Estándar) Sintaxis para Bloques de Código Sincronizado

Concurrencia en Java

UNIDAD III.- Programación Concurrente

PROGRAMACIÓN ORIENTADA A OBJETOS 1/7/2009. Examen de Java. Nombre: DNI: Titulación:

CAPÍTULO 2. PROCESOS VS. HILOS

Multitarea en Java. Rafa Caballero - UCM

Clases abstractas e interfaces en Java

Java: Programación Multithread

Hilos. Hilos. Revisión Modelos Multihilados Librerías de Hilos Aspectos sobre Hilos Ejemplos de Sistemas Operativos Hilos en Linux

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

Primitivas de Sincronización

Concurrencia en Java

Programación Concurrente con Java

Hilos. Módulo 4. Departamento de Informática Facultad de Ingeniería Universidad Nacional de la Patagonia San Juan Bosco. Hilos

PROGRAMACION CONCURRENTE

HOJA DE EJERCICIOS 5 PROGRAMACIÓN CON EXCEPCIONES EN JAVA

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

Introducción a los Threads Java

CAPÍTULO 3. PROCESOS VS. HILOS

Concurrencia en Java

Tareas en segundo plano AsyncTask Thread

Programación orientada a objetos

Asignatura. Taller de Computación VI. Módulo VI Threads

Programación orientada a objetos. Resumen de Temas Unidad 5: Herencia

PROGRAMACION CONCURRENTE Y DISTRIBUIDA. IV.3 Monitorización de excepciones en Threads

Benemérita Universidad Autónoma del Estado de Puebla

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

Programación concurrente y semáforos en Java

Programación orientada a objetos III

Programación Concurrente en Java

PROGRAMACIÓN ORIENTADA A OBJETOS 10/02/2009. Examen de Java. Nombre: DNI: Titulación:

PROGRAMACIÓN EN JAVA. { una línea para definir, crear o ejecutar ; }

GUIs en Java (4) Iván Alonso

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

Procesamiento distribuido en Java

Interfaces. Amparo López Gaona. Septiembre de Amparo López Gaona () Interfaces Septiembre de / 1

Programación de Multitareas utilizando Hilos

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

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

Polimorfismo Java y Servicios Web I Master en Ingeniería Matemática

Hebras y Sincronización en Java

Programación multihebra

MECANISMOS DE SINCRONIZACIÓN PROGRAMACIÓN CONCURRENTE Y PARALELA

Concurrencia en Android LSUB, GYSC, URJC

Examen Teórico. Convocatoria de Julio de 2015

Proceso. Threads, SMP, and Microkernels. Multithreading. Proceso

Transcripción:

Laboratorio I Java Threads (Silberschatz Galvin) Un proceso es un programa ejecutandose dentro de su propio espacio de direcciones. Java es un sistema multiproceso, esto significa que soporta varios procesos corriendo a la vez dentro de sus propios espacios de direcciones 1

Existen tareas que se deben realizar en paralelo. Mas de una actividad simultanea o concurrente. Ejemplos. El Sistema operativo puede enviar mail, escuchar música, recibir mensajes, imprimir simultáneamente. Existen leguajes de programación que no permiten realizar operaciones concurrentes, solo dejan ejecutar procesos de forma secuencial. Un hilo es una secuencia de codigo en ejecucion dentro del contexto de un proceso. Los hilos no pueden ejecutarse por si solos, necesitan la suervision de un proceso padre para correr. Dentro de cada proceso hay varios procesos ejecutandose. Los hilos a menudo son llamados procesos ligeros 2

Un hilo (o proceso ligero) es una unidad básica de utilización del CPU; consiste de: Contador de programa Conjunto de registros Espacio de stack Un hilo comparte con sus hilos pares: Sección de código Sección de datos Recursos del sistema operativo En conjunto se les conoce como tarea Un proceso tradicional o pesado, es igual a una tarea con un hilo. 3

. Sistema operativo que mantiene varios hilos de ejecución dentro de un mismo proceso. MS-DOS soporta un solo hilo. UNIX soporta múltiples procesos de usuarios, pero sólo un hilo por proceso. Windows 2000, Solaris, Linux, Mach, y OS/2 soportan múltiples hilos. 4

Java.lang Thread: es responsable de producir hilos funcionales para otras clases Runnable: proporciona la capacidad de anadir la funcionalidad de un hilo a una clase implementando la interfaz en lugar de derivarla de Thread ThreadDeath proporciona un mecanismo que permite hacer limpieza despues de que un hilo haya sido finalizado de forma asincrona. Deriva de la clase error ThreadGroup se usa para manejar un grupo de hilos de modo conjunto Object En Java, los hilos comparten el mismo espacio de memoria. Incluso comparten gran parte del entorno de ejecución, de modo que la creación de nuevos hilos es mucho más rápida que la creación de nuevos procesos. Son dos los mecanismos que nos permiten crear hilos: implementando la interfaz Runnable, o extendiendo la clase Thread, esto es, creando una subclase de esta clase. Con la creación previa de una subclase de la clase Thread Es en el método run donde se implementa el código correspondiente a la acción (la tarea) que el hilo debe desarrollar class MiThread extends Thread public void run()... 5

los hilos se arrancan con el método start se suspenden con el método suspend se reanudan con el método resume se detienen con el método stop (el cual supone también la muerte del hilo y la correspondiente excepción ThreadDeath), Un hilo suspendido puede reanudarse en la instrucción del método run en la que fue suspendido. public MiHilo extends Thread public void run() // Aquí el código pesado // que tarda mucho ;... MiHilo elhilo = new MiHilo(); elhilo.start(); System.out.println( Y todo continua"); 6

En el caso de crear un hilo extendiendo la clase Thread, se pueden heredar los métodos y variables de la clase padre. Si es así, una misma subclase solamente puede extender o derivar una vez de la clase padre Thread. Esta limitación de Java puede ser superada a través de la implementación de Runnable. Veamos el siguiente ejemplo: public class MiThread implements Runnable Thread t; public void run() // Ejecución del thread una vez creado En este caso necesitamos crear una instancia de Thread antes de que el sistema pueda ejecutar el proceso como un hilo. Además, el método abstracto run que está definido en la interfaz Runnable tiene que implementarse en la nueva clase creada. public class HolaRunnable implements Runnable public void run() System.out.println("Hola desde un hilo"); public static void main(string args[]) (new Thread(new HolaRunnable ())).start(); public class HolaThread extends Thread public void run() System.out.println( Hola desde un Hilo!"); public static void main(string args[]) (new HolaThread()).start(); 7

public class SleepMessages public static void main (String args []) throws InterruptedException String info [] = "cuatro", "cinco", "veinte", "diez" ; for (int i = 0 ; i < info.length ; i++) //Pause for 4 seconds Thread.sleep (4000); //Print a message System.out.println (info [i]); El comportamiento de un hilo depende del estado en que se encuentre, este estado define su modo de operación actual, por ejemplo, si esta corriendo o no. La relación de estados en los que puede estar un hilo Java. New Runnable Not running Dead 8

Los eventos que pueden hacer que un hilo esté parado de modo temporal o que el hilo pase al estado not running son: El método suspend El método sleep El método wait El hilo esta bloqueado por I/O La lista de eventos correspondientes que pueden hacer que el hilo pase al estado runnable son. Si un hilo está suspendido, la invocación del método resume Si un hilo está durmiendo, pasarán el número de milisegundos que se ha especificado que debe dormir Si un hilo está esperando, la llamada a notify o notifyall por parte del objeto por el que espera Si un hilo está bloqueado por I/O, la finalización de la operación I/O en cuestión 9

Un hilo entra en estado dead cuando ya no es un objeto necesario. Los hilos en estado dead no pueden ser resucitados y ejecutados de nuevo. Un hilo puede entrar en estado dead a través de dos vías: El método run termina su ejecución. El método stop es llamado. BLOQUEADO start() LISTO CORRIENDO FINALIZADO NACIDO sleep() wait() notify() notifyall() DURMIENDO ESPERANDO 10

public class ThreadEjemplo extends Thread public ThreadEjemplo (String str) super (str); public void run () for (int i = 0 ; i < 10 ; i++) System.out.println (i + " " + getname ()); System.out.println ("Termina thread " + getname ()); public static void main (String[] args) new ThreadEjemplo ("Pepe").start (); new ThreadEjemplo ("Juan").start (); System.out.println ("Termina thread main"); 11