Threads (Hilos de ejecución)
|
|
|
- Mario Ruiz Rivero
- hace 9 años
- Vistas:
Transcripción
1 Threads (Hilos de ejecución) Pedro Corcuera Dpto. Matemática Aplicada y Ciencias de la Computación Universidad de Cantabria [email protected]
2 Objetivos Conocer los detalles de los hilos de ejecución (threads) Aprender a programar aplicaciones concurrentes basadas en threads Java 2
3 Índice Concepto de thread Estados de un Thread Prioridades de un Thread Clase Thread Formas de crear threads en Java Extending Thread class Implementing Runnable interface ThreadGroup Sincronización Comunicación Inter-thread Asignación de tarea mediante Timer y TimerTask Java 3
4 Concepto de Thread Un thread o hilo de ejecución es la ejecución secuencial de una serie de instrucciones dentro de un programa De forma simple se puede pensar que los threads son procesos ejecutados por un programa La mayoría de lenguajes de programación son singlethreaded El desarrollo del hardware ha llevado el concepto de thread a la CPU: multinúcleo Java 4
5 Concepto de Thread Threads múltiples en múltiples CPUs Thread 1 Thread 2 Thread 3 Threads múltiples Thread 1 compartiendo Thread 2 una CPU Thread 3 Java 5
6 Multi-threading en la plataforma Java Cada aplicación tiene un thread, llamado el thread principal. Este thread tiene la habilidad de crear threads adicionales La programación multi-threaded es más compleja: acceso compartido de objetos riesgo de condición de carrera Java 6
7 Estados de un thread Un thread puede estar en uno de los siguientes estados: Running En curso de ejecución En control de la CPU Ready to run Puede ejecutarse pero no se le ha dado la orden Resumed Ready to run después de haber estado suspendido o bloqueado Suspended Voluntariamente permite que otros threads se ejecuten Blocked Esperando por algún recurso o que ocurra un evento Java 7
8 Estados de un thread Java 8
9 Prioridades de un thread Las prioridades determinan que thread recibe el control de la CPU y consiga ser ejecutado primero En Java viene definidas por un valor entero de 1 a 10 A mayor valor de prioridad, mayor la oportunidad de ser ejecutado primero Si dos threads tienen la misma prioridad, la ejecución depende del sistema operativo Java 9
10 Prioridades de un thread Constante Prioridad Nombre del Thread MAX_PRIORITY 10 Reference Handler 8 Finalizer 6 AWT-EventQueue-0, methods actionperformed(), keypressed(), mouseclicked(), y windowclosing(). NORM_PRIORITY 5 main Signal dispatcher AWT-Windows SunToolkit.PostEventQueue-0 4 Screen Updater MIN_PRIORITY 1 - Java 10
11 La clase Thread - Constructores Resumen de Constructores Thread() Allocates a new Thread object. Thread(Runnable target) Allocates a new Thread object. Thread(Runnable target, String name) Allocates a new Thread object. Thread(String name) Allocates a new Thread object. Thread(ThreadGroup group, Runnable target) Allocates a new Thread object. Thread(ThreadGroup group, Runnable target, String name) Allocates a new Thread object so that it has target as its run object, has the specified name as its name, and belongs to the thread group referred to by group. Thread(ThreadGroup group, Runnable target, String name, long stacksize) Allocates a new Thread object so that it has target as its run object, has the specified name as its name, belongs to the thread group referred to by group, and has the specified stack size. Thread(ThreadGroup group, String name) Allocates a new Thread object. Java 11
12 La clase Thread - Constantes Resumen de Campos static int MAX_PRIORITY The maximum priority that a thread can have. static int MIN_PRIORITY The minimum priority that a thread can have. static int NORM_PRIORITY The default priority that is assigned to a thread. Java 12
13 La clase Thread algunos métodos Method Summary static Thread currentthread() Returns a reference to the currently executing thread object. long getid() Returns the identifier of this Thread. String getname() Returns this thread's name. Thread.State getstate() Returns the state of this thread. ThreadGroup getthreadgroup() Returns the thread group to which this thread belongs. void interrupt() Interrupts this thread. void run() If this thread was constructed using a separate Runnable run object, then that Runnable object's run method is called; otherwise, this method does nothing and returns. void setcontextclassloader(classloader cl) Sets the context ClassLoader for this Thread. void setname(string name) Changes the name of this thread to be equal to the argument name. void setpriority(int newpriority) Changes the priority of this thread. static void sleep(long millis) Causes the currently executing thread to sleep (temporarily cease execution) for the specified number of milliseconds, subject to the precision and accuracy of system timers and schedulers. void start() Causes this thread to begin execution; the Java Virtual Machine calls the run method of this thread. Java 13
14 Formas de crear e iniciar un Thread Método A: Extendiendo la clase Thread Derivar de la clase Thread Override el método run() Crear un thread con new MyThread(...) Iniciar el thread invocando el método start() Método B: Implementando la interface Runnable Implementar la interface Runnable Override el método run() Crear un thread con new Thread(runnable) Iniciar el thread invocando el método start() Java 14
15 Extendiendo la clase Thread La subclase extiende la clase Thread La subclase sobreescribe el método run() de la clase Thread Se puede crear un objeto instanciando la subclase Invocando el método start() del objeto instanciado inicia la ejecución del thread El entorno runtime de Java inicia la ejecución del thread mediante la llamada del método run() del objeto Java 15
16 Esquemas de inicio de un thread desde una subclase Esquema 1: El método start() no está en el constructor de la subclase El método start() requiere ser invocado explícitamente después de crear la instancia del objeto para que se inicie el thread Esquema 2: El método start() está en el constructor de la subclase La creación de la instancia del objeto iniciará el thread Java 16
17 Ejemplo 1: método start() no está en el constructor public class PrintNameThread extends Thread { PrintNameThread(String name) { super(name); // Override el metodo run() de la clase Thread // se ejecuta cuando el metodo start() se invoca public void run() { System.out.println("metodo run() del thread " + this.getname() + " invocado" ); for (int i = 0; i < 10; i++) { System.out.print(this.getName()); Java 17
18 Ejemplo 1: método start() no está en el constructor public class ExtendThreadClassTest1 { public static void main(string args[]) { System.out.println("Crea objeto PrintNameThread.."); PrintNameThread pnt1 = new PrintNameThread("A"); // Inicio del thread invocando el metodo start() System.out.println("Llamada del metodo start() de " + pnt1.getname() + " thread"); pnt1.start(); System.out.println("Crea objeto PrintNameThread.."); PrintNameThread pnt2 = new PrintNameThread("B"); System.out.println("Llamada del metodo start() de " + pnt2.getname() + " thread"); pnt2.start(); Java 18
19 Ejemplo 2: método start() no está en el constructor public class Contador1 extends Thread { protected int count, inc, delay; public Contador1( int init, int inc, int delay ) { this.count = init; this.inc = inc; this.delay = delay; public void run() { try { for (;;) { System.out.print(count + " "); count += inc; sleep(delay); catch (InterruptedException e) { public static void main(string[] args) { new Contador1(0, 1, 33).start(); new Contador1(0, -1, 100).start(); Java 19
20 Ejemplo 3: método start() está en el constructor public class PrintNameThread1 extends Thread { PrintNameThread1(String name) { super(name); // metodo start() dentro del constructor start(); public void run() { String name = getname(); for (int i = 0; i < 10; i++) { System.out.print(name); Java 20
21 Ejemplo 3: método start() está en el constructor public class ExtendThreadClassTest2 { public static void main(string args[]) { PrintNameThread1 pnt1 = new PrintNameThread1("A"); PrintNameThread1 pnt2 = new PrintNameThread1("B"); Versión sin instanciar objetos public class ExtendThreadClassTest2 { public static void main(string args[]) { new PrintNameThread1("A"); new PrintNameThread1("B"); Java 21
22 Implementando la interface Runnable La interface Runnable debe implementarse por una clase cuyas instancias se intentan ejecutar como thread La clase debe definir el método run() sin argumentos El método run() equivale a main() del nuevo thread Proporcionar los medios para que la clase sea activa sin derivar Thread Una clase que implementa Runnable puede ejecutarse sin derivar de Thread instanciando un Thread y pasándolo como parámetro Java 22
23 Esquemas de inicio de un thread para una clase que implementa Runnable Esquema 1: El thread invocante crea un objeto Thread y lo inicia explícitamente después de crear un objeto de la clase que implementa la interface Runnable El método start() del objeto Thread require ser invocado explícitamente despueés que el objeto se crea Esquema 2: El objeto Thread se crea y se inicia dentro del método constructor de la clase que implementa la interface Runnable El thread invocante sólo necesita crear instancias de la clase Runnable Java 23
24 Ejemplo 1: creación de un objeto thread e inicio explícito // La clase implementa la interface Runnable class PrintNameRunnable implements Runnable { String name; PrintNameRunnable(String name) { this.name = name; // Implementacion de run() definido en la // interface Runnable. public void run() { for (int i = 0; i < 10; i++) { System.out.print(name); Java 24
25 Ejemplo 1: creación de un objeto thread e inicio explícito public class RunnableThreadTest1 { public static void main(string args[]) { PrintNameRunnable pnt1 = new PrintNameRunnable("A"); Thread t1 = new Thread(pnt1); t1.start(); PrintNameRunnable pnt2 = new PrintNameRunnable("B"); Thread t2 = new Thread(pnt2); t2.start(); PrintNameRunnable pnt3 = new PrintNameRunnable("C"); Thread t3 = new Thread(pnt3); t3.start(); Java 25
26 Ejemplo 2: creación de objeto thread e inicio dentro del constructor class PrintNameRunnable1 implements Runnable { Thread thread; PrintNameRunnable1(String name) { thread = new Thread(this, name); thread.start(); // Implementacion de run() definido en la // interface Runnable. public void run() { String name = thread.getname(); for (int i = 0; i < 10; i++) { System.out.print(name); Java 26
27 Ejemplo 2: creación de objeto thread e inicio dentro del constructor public class RunnableThreadTest2 { public static void main(string args[]) { // Como el constructor del objeto PrintNameRunnable // crea un objeto Thread y lo inicia, // no hay necesidad de hacerlo aqui. new PrintNameRunnable1("A"); new PrintNameRunnable1("B"); new PrintNameRunnable1("C"); Java 27
28 Comparativa extensión de Thread e implementación interface Runnable Seleccionar entre las dos formas de crear un thread es cuestión de gusto Atributos de la extensión de la clase Thread Fácil de implementar La clase no puede extender otra clase Atributos de implementar la interface Runnable Puede tomar más trabajo debido a la declaración de Thread e invocación de los métodos Thread La clase puede extender otras clases Java 28
29 Clase ThreadGroup Un grupo de threads representa un conjunto de threads Adicionalmente, un grupo de threads puede incluir otros grupos de threads Los grupos de thread forman un árbol en el que cada grupo de treads excepto el inicial tiene un padre Dentro de un grupo se permite que un thread tenga acceso a la información del grupo, pero no a los demás grupos ni el del padre Java 29
30 Ejemplo Clase ThreadGroup public class SimpleThread extends Thread { public SimpleThread(String str) { super(str); public void run() { for (int i = 0; i < 5; i++) { // System.out.format("%d %s%n", i, getname()); try { sleep((long)(math.random() * 1000)); catch (InterruptedException e) { System.out.format("HECHO! %s%n", getname()); Java 30
31 Ejemplo Clase ThreadGroup public class ThreadGroupTest { public static void main (String[] args) { // Inicia tres threads primero. new SimpleThread("Boston").start(); new SimpleThread("New York").start(); new SimpleThread("Seoul").start(); // Obtiene un ThreadGroup y muestra numero ThreadGroup group = Thread.currentThread().getThreadGroup(); System.out.println("Numero de threads activos en el grupo = " + group.activecount()); // Muestra nombres de threads en ThreadGroup. Thread[] tarray = new Thread[10]; int actualsize = group.enumerate(tarray); for (int i=0; i<actualsize;i++){ System.out.println("Thread " + tarray[i].getname() + " en thread group " + group.getname()); Java 31
32 Sincronización: condición de carrera Una condición de carrera ocurre cuando varios threads, que se ejecutan sin sincronizar, acceden al mismo objeto (llamado recurso compartido) retornando resultados inesperados (error) Ejemplo: Con frecuencia los Threads comparten un recurso común, pe un fichero, con un thread leyendo del fichero y otro escribiendo en el fichero Esta situación se puede evitar sincronizando los threads que acceden al recurso común Java 32
33 Ejemplo de thread sin sincronizar public class UnsynchronizedExample2 extends Thread { static int n = 1; public void run() { for (int i = 1; i <= 10; i++) { try { Thread.sleep(500); catch (InterruptedException ie) { System.out.println(n); n++; public static void main(string args[]) { Thread thr1 = new UnsynchronizedExample2(); Thread thr2 = new UnsynchronizedExample2(); thr1.start(); thr2.start(); Java 33
34 Sincronización: bloqueando un objeto La operación de sincronización es un mecanismo de exclusión mutua de threads, es decir, no puede ser interrumpida (operación atómica) Un thread se sincroniza cuando se convierte en propietario del monitor del objeto (bloqueo) Formas para bloquear (sincronizar) un thread Opción 1: Usar el método synchronized Opción 2: Usar la sentencia synchronized sobre un objeto común Java 34
35 Sincronización: bloqueando un objeto Método sincronizado: class MyClass{ synchronized void amethod(){ statements Bloque sincronizado : synchronized(exp){ statements Java 35
36 Ejemplo de threads sincronizados public class SynchronizedExample2 extends Thread { static int n = 1; public void run() { syncmethod(); synchronized static void syncmethod() { for (int i = 1; i <= 10; i++) { try { Thread.sleep(500); catch (InterruptedException ie) { System.out.println(n); n++; public static void main(string args[]) { Thread thr1 = new SynchronizedExample2(); Thread thr2 = new SynchronizedExample2(); thr1.start(); thr2.start(); Java 36
37 Ejemplo de threads sincronizados public class SynchronizedExample1 extends Thread { Operation ope ; SynchronizedExample1 (Operation op){ this.ope = op; public void run() { synchronized (ope) { ope.method(); public static void main(string args[]) { Operation op = new Operation(); Thread thr1 = new SynchronizedExample1(op); Thread thr2 = new SynchronizedExample1(op); thr1.start(); thr2.start(); Java 37
38 Ejemplo de threads sincronizados class Operation { static int n = 1; void method() { for (int i = 1; i <= 10; i++) { try { Thread.sleep(250); catch (InterruptedException ie) { System.out.println(n); n++; Java 38
39 Métodos de la clase Object para la comunicación Inter-thread Resumen de métodos void notify() Wakes up a single thread that is waiting on this object's monitor. void notifyall() Wakes up all threads that are waiting on this object's monitor. void wait() Causes the current thread to wait until another thread invokes the notify() method or the notifyall() method for this object. void wait(long timeout) Causes the current thread to wait until either another thread invokes the notify() method or the notifyall() method for this object, or a specified amount of time has elapsed. void wait(long timeout, int nanos) Causes the current thread to wait until another thread invokes the notify() method or the notifyall() method for this object, or some other thread interrupts the current thread, or a certain amount of real time has elapsed. Java 39
40 Métodos wait(), notify(), and notifyall() Para facilitar la comunicación entre threads se usan los métodos wait(), notify(), y notifyall() de la clase Object Estos métodos deben ser invocados en un método o bloque sincronizado del objeto invocante de los métodos y deben usarse dentro de un bloque try/catch El método wait() provoca que el thread espere hasta que ocurra alguna condición, en cuyo caso se usan los métodos notify() o notifyall() para notificar a los threads en espera para continuar con la ejecución Java 40
41 Método wait() de la Clase Object El método wait() provoca que un thread libere el bloqueo que mantiene sobre un objeto, permitiendo que otro thread se ejecute El método wait() está definido en la clase Object wait() sólo se puede invocar desde el interior de un código sincronizado y siempre debe estar en un bloque try porque genera IOExceptions wait() sólo puede ser invocado por un thread que es propietario del bloqueo del objeto Java 41
42 Método wait() de la Clase Object Cuando se invoca el método wait(), el thread se incapacita para el planificador de tareas y permanece inactivo hasta que ocurre uno de los eventos: otro thread invoca el método notify() para este objeto y el planificador escoje arbitrariamente la ejecución del thread otro thread invoca el método notifyall() para este objeto otro thread interrumpe este thread el tiempo especificado por wait() ha transcurrido Después, el thread pasa a estar disponible otra vez y compite por el bloqueo del objeto y si lo consigue continúa como si no hubiera ocurrido la suspensión Java 42
43 Método notify() Despierta un único thread que está esperando por este monitor del objeto Si varios threads esperan por este objeto, uno de ellos es seleccionado para ser despertado La selección es arbitraria y ocurre a discreción de la implementación Sólo puede usarse dentro de un código sincronizado El thread despertado no podrá continuar hasta que el thread en curso renuncie al bloqueo sobre el objeto Java 43
44 Comunicación entre threads: Ejemplo práctico Cliente Camarero (esperando) Cliente Camarero Llega Notifica al camarero Va hacia el cliente Espera por la orden Pide esperar al cliente Va por la comida Elige menú Pide esperar al camarero Espera la orden Come la comida Notifica al cliente Entrega la orden Da la orden Llama al camarero Toma la orden Abandona el restaurante Espera nuevamente Java 44
45 Comunicación entre threads: Ejemplo Productor-Consumidor Suponer un escenario en el que existe dos threads distintos operando ambos sobre una única área de datos compartida Un thread, el Productor, inserta información en el área de datos mientras que el otro thread, el Consumidor, extrae información de la misma área Para que el Productor inserte información en el área de datos debe haber suficiente espacio La única función del Productor es insertar datos en el área de datos, no elimina ningún dato Java 45
46 Comunicación entre threads: Ejemplo Productor-Consumidor Para que el Consumidor pueda extraer información debe existir información en el área de datos La única función del Consumidor es extraer datos desde el área de datos La solución del problema Productor-Consumidor se consigue elaborando un adecuado protocolo de comunicación entre los threads para intercambiar información y es el principal factor para que este problema sea interesante en términos de sistemas concurrentes Java 46
47 Productor-Consumidor sin sincronizar Area de datos: CubbyHole.java public class CubbyHole { private int contents; private boolean available = false; public int get() { available = false; return contents; public void put(int value) { contents = value; available = true; Java 47
48 Productor-Consumidor sin sincronizar Producer.java public 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) { Java 48
49 Productor-Consumidor sin sincronizar Consumer.java public 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); Java 49
50 Productor-Consumidor sin sincronizar Programa principal public class ProducerConsumerUnsynchronized { 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(); Java 50
51 Productor-Consumidor sin sincronizar Resultado >java ProducerConsumerUnsynchronized Producer #1 put: 0 Consumer #1 got: 0 Consumer #1 got: 0 Consumer #1 got: 0 Consumer #1 got: 0 Consumer #1 got: 0 Consumer #1 got: 0 Consumer #1 got: 0 Consumer #1 got: 0 Consumer #1 got: 0 Consumer #1 got: 0 Producer #1 put: 1 Producer #1 put: 2 Producer #1 put: 3 Producer #1 put: 4 Producer #1 put: 5 Producer #1 put: 6 Producer #1 put: 7 Producer #1 put: 8 Producer #1 put: 9 Los resultados son impredecibles Se puede leer un número antes de que se haya producido Se pueden producir varios números con solo uno o dos leídos Java 51
52 Productor-Consumidor sincronizado Area de datos: CubbyHole.java public class CubbyHole { private int contents; private boolean available = false; public synchronized int get(int who) { while (available == false) { try { wait(); catch (InterruptedException e) { available = false; System.out.format("Consumer %d got: %d%n", who, contents); notifyall(); return contents; Java 52
53 Productor-Consumidor sincronizado Area de datos: CubbyHole.java public synchronized void put(int who, int value) { while (available == true) { try { wait(); catch (InterruptedException e) { contents = value; available = true; System.out.format("Producer %d put: %d%n", who, contents); notifyall(); Java 53
54 Productor-Consumidor sincronizado Programa principal public class ProducerConsumerSynchronized { 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(); Java 54
55 Productor-Consumidor sincronizado Resultado >java ProducerConsumerSynchronized Producer 1 put: 0 Consumer 1 got: 0 Producer 1 put: 1 Consumer 1 got: 1 Producer 1 put: 2 Consumer 1 got: 2 Producer 1 put: 3 Consumer 1 got: 3 Producer 1 put: 4 Consumer 1 got: 4 Producer 1 put: 5 Consumer 1 got: 5 Producer 1 put: 6 Consumer 1 got: 6 Producer 1 put: 7 Consumer 1 got: 7 Producer 1 put: 8 Consumer 1 got: 8 Producer 1 put: 9 Consumer 1 got: 9 Java 55
56 Asignación de tareas mediante Clases Timer y TimerTask La clase Timer facilita a los threads la programación de ejecución futura de tareas en un thread de fondo La tareas se pueden programar para ejecutarse una vez o de forma repetida en intervalos regulares A cada objeto Timer le corresponde un thread de fondo que se usa para ejecutar todas las tareas del timer secuencialmente Los tiempos de las tareas deben completarse rápidamente Java 56
57 Asignación de tareas mediante Clases Timer y TimerTask La clase TimerTask es una clase abstracta con un método abstracto llamado run() La clase concreta debe implementar el método abstracto run() Java 57
58 import java.util.timer; import java.util.timertask; Ejemplo de uso Clases Timer y TimerTask /** Demo simple que usa java.util.timer para ejecutar una tarea en 5 segundos */ public class TimerReminder { Timer timer; public TimerReminder(int seconds) { timer = new Timer(); timer.schedule(new RemindTask(), seconds*1000); class RemindTask extends TimerTask { public void run() { System.out.println("Se acabo el tiempo!"); timer.cancel(); //Termina el tiempo del thread public static void main(string args[]) { System.out.println("Se programa la tarea ReminderTask para 5 segundos"); new TimerReminder(5); System.out.println("Tarea programada."); Java 58
59 Problemas a resolver en la programación concurrente La programación concurrente debe evitar problemas que pueden surgir entre los recursos disponibles por los threads: Acaparamiento (starvation) Inactividad (dormancy) Abrazo mortal (deadlock) Terminación prematura Para ello debe usarse correctamente la sincronización Java 59
Programación concurrente en Java
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
Tema 6. Threads: programas multitarea
Tema 6. Threads: programas multitarea Procesos e hilos Creación de threads Ciclo de vida de un thread Sincronización Prioridades Grupos de threads Relación de métodos Ejemplo sincronización 1 Procesos
Ejemplo. class SiNoThread extends Thread { private String SiNo; static int Contador = 0; public SiNoThread(String s) { super(); SiNo = s; }
Qué son los threads? Todos los programadores conocen lo que es un proceso, la mayoría diría que es un programa en ejecución: tiene un principio, una secuencia de instrucciones y tiene un final. Un thread
Laboratorio I Java Threads (Silberschatz Galvin)
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
Threads. La plataforma JAVA soporta programas multhreading a través del lenguaje, de librerías y del sistema de ejecución. Dos.
Threads Un thread es un flujo de control secuencial dentro de un programa. A los threads también se los conoce como procesos livianos ó contextos de ejecución. Un thread es similar a un programa secuencial:
Tema 12: Programación multihilo
Tema 12: Programación multihilo Antonio J. Sierra Índice 1. Modelo de hilo en Java. 2. El hilo principal. 3. Creación de un hilo. 4. Creación de múltiples hilos. Prioridades. 5. Comunicación entre hilos.
Threads o Hilos. Un thread en JAVA comienza como una instancia de java.lang.thread antes de convertirse en un hilo de ejecución.
Threads o Hilos Los hilos son otra forma de crear la posibilidad de concurrencia de actividades; sin embargo, la gran diferencia es que los hilos comparten el código y el acceso a los datos. En cierta
Unidad IV: Programación concurrente (MultiHilos) 4.1. Concepto de hilo
Unidad IV: Programación concurrente (MultiHilos) 4.1. Concepto de hilo Hilo (theread) llamado también proceso ligero o subproceso, es la unidad de ejecución de un proceso y esta asociado con una secuencia
BENEMERITA UNIVERSIDAD AUTONOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACIÓN LICENCIATURA EN CIENCIAS DE LA COMPUTACIÓN
BENEMERITA UNIVERSIDAD AUTONOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACIÓN LICENCIATURA EN CIENCIAS DE LA COMPUTACIÓN PROGRAMACIÓN CONCURRENTE Y PARALELA PRACTICA 8 MONITORES BASADOS EN SEMÁFOROS
1. Fundamentos. Existen dos tipos distintos de multitarea: BASADA EN PROCESOS
Hilos 1. Fundamentos. Los procesadores y los Sistemas Operativos modernos permiten la multitarea, es decir, la realización simultánea de dos o más actividades. En la realidad, un ordenador con una sola
1 HILOS (THREADS) EN JAVA
1 HILOS (THREADS) EN JAVA 1.1QUÉ ES UN THREAD La Máquina Virtual Java (JVM) es un sistema multihilo. Es decir, es capaz de ejecutar varios hilos de ejecución simultáneamente. La JVM gestiona todos los
Ejecución de hebras. En realidad, todas las aplicaciones escritas en Java son aplicaciones multihebra (recuerde el recolector de basura).
Ejecución de hebras En realidad, todas las aplicaciones escritas en Java son aplicaciones multihebra (recuerde el recolector de basura). Hebras vs. Procesos Los cambios de contexto son más costosos en
Programación Orientada a Eventos
Programación Orientada a Eventos Técnicas de Programación Santiago Pavón V:2012.03.13 Programas Secuénciales El flujo de ejecución del programa sigue la secuencia de sentencias que lo forman. El estado
Programación concurrente en Java. Breve introducción. Miguel Ángel LATRE Dept. de Informática e Ingeniería de Sistemas
Programación concurrente en Java. Breve introducción Miguel Ángel LATRE Dept. de Informática e Ingeniería de Sistemas Concurrencia en Java Hilos de ejecución Clase Thread e interfaz Runnable Pausas Interrupciones
Apuntes de Java. Tema 10: Threads. Uploaded by Ingteleco
Apuntes de Java Tema 10: Threads Uploaded by Ingteleco http://ingteleco.webcindario.com [email protected] La dirección URL puede sufrir modificaciones en el futuro. Si no funciona contacta por email
Java Threads. Sistemas Distribuidos Rodrigo Santamaría
Java Threads Sistemas Distribuidos Rodrigo Santamaría Java Threads Hilos Sincronización Ejercicios FAQ 2 3 Hilos Un hilo (Thread) es un proceso en ejecución dentro de un programa java main Thread t t.start()
Programación Concurrente en Java: Threads. Ejemplos de programación concurrente. Luis Fernando Llana Díaz. 24 de abril de 2008
Departamento de Sistemas Informáticos y Computación Universidad Complutense de Madrid de abril de 00 Ejemplos de programación concurrente En un sistema operativo, diversos programas compiten por los recursos
CAPÍTULO III: Programación Concurrente en JAVA I: Programación con hilos
CAPÍTULO III: Programación Concurrente en JAVA I: Programación con hilos III. PROGRAMACION CON HILOS (THREADS) EN JAVA Java contiene una serie de clases y construcciones específicas para programar de forma
Arquitecturas cliente/servidor
Arquitecturas cliente/servidor Creación de Sockets Cliente Servidor 1 Creación de Sockets Cliente/Servidor Sockets en TCP Concepto de Hilos Definición de DAEMON Sockets en UDP 2 THREADS 3 Qué es un thread?
UNIDAD III.- Programación Concurrente
UNIDAD III.- Programación Concurrente Sincronización Todo thread tiene una prioridad. Un thread hereda su prioridad, cuyo valor está entre 1 y 10 La prioridad puede modificarse con los métodos: setpriority()
Conceptos Básicos de Concurrencia en Java
Conceptos Básicos de Concurrencia en Java Ingeniería del Software II Curso 2010/2011 Sergio Ilarri Artigas [email protected] Parte del material está extraído de JavaSun y Java Tutorial: Copyright 1994-2007
Asignatura. Taller de Computación VI. Módulo VI Threads
Asignatura Módulo VI Threads Elaboración Hugo Sanoguera, Fabián Gentile Este material pertenece a la materia, de la Carrera de Analista de Sistemas de Computación del INSTITUTO DE TECNOLOGÍA ORT. Todos
Programación concurrente Hebras
20151021 dit UPM Programación concurrente Hebras Juan Antonio de la Puente Algunos derechos reservados. Este documento se distribuye bajo licencia Crea9ve Commons Reconocimiento-NoComercial-Compar9rIgual
MONITORES EN JAVA. Antonio Tomeu Control de la Concurrencia en Java: API Estándar
MONITORES EN JAVA Un monitor es un objeto que implementa acceso bajo e.m. a todos sus métodos, y provee sincronización En Java, son objetos de una clase cuyos métodos públicos son todos synchronized Un
Primitivas de Sincronización
Primitivas de Sincronización JUAN CARLOS CONDE RAMÍREZ DISTRIBUTED COMPUTING Introducción Todas las soluciones previas al problema de mutex fueron un desperdicio de algún modo: Si un proceso es incapaz
CAPÍTULO 3. PROCESOS VS. HILOS
CAPÍTULO 3. PROCESOS VS. HILOS 3.1 Primitivas de sincronización en Java Java no tiene semáforos como primitivas de sincronización. Sin embargo, proporciona otras primitivas diferentes con las cuales sí
PROGRAMACION CONCURRENTE Y DISTRIBUIDA. IV.3 Monitorización de excepciones en Threads
PROGRAMACION CONCURRENTE Y DISTRIBUIDA IV.3 Monitorización de excepciones en Threads J.M. Drake 1 Gestión excepciones en thread Java Las excepciones se pueden lanzar en cualquier punto de un programa Java.
Programación concurrente
Programación concurrente Java y Servicios Web I Master en Ingeniería Matemática Manuel Montenegro Dpto. Sistemas Informáticos y Computación Desp. 467 (Mat) [email protected] Programación concurrente
Concurrencia. Primitivas IPC con bloqueo
Concurrencia Primitivas IPC con bloqueo Primitivas de IPC con bloqueo La solución de Peterson es correcta, pero tiene el defecto de requerir espera ocupada: Cuando un proceso quiere entrar en su región
2. Indica cuál de las siguientes afirmaciones es cierta:
Nombre:. Indica cuál de las siguientes afirmaciones es cierta: El diseño de un programa procedural está guiado por la división en tareas a realizar, mientras que el diseño orientado a objetos está dirigido
dit Programación concurrente Sincronización condicional UPM
20151028 dit UPM Programación concurrente Sincronización condicional Juan Antonio de la Puente Algunos derechos reservados. Este documento se distribuye bajo licencia Crea9ve Commons
EXCLUSIÓN MUTUA ENTRE HILOS. TEMA 5: Control de la Concurrencia en Java (API Estándar) Sintaxis para Bloques de Código Sincronizado
TEMA 5: Control de la Concurrencia en Java (API Estándar) CONTENIDO Exclusión Mutua con código synchronized. Exclusión Mutua con métodos synchronized. Protocolos de Control de la Exclusión Mutua. Interbloqueos
Guía práctica de estudio 12: Hilos
: Elaborado por: M.C. M. Angélica Nakayama C. Ing. Jorge A. Solano Gálvez Autorizado por: M.C. Alejandro Velázquez Mena Guía práctica de estudio 12: Objetivo: Implementar el concepto de multitarea utilizando
Java y JVM: programación concurrente. Adolfo López Díaz
Java y JVM: programación concurrente Adolfo López Díaz JVM Máquina virtual Ambiente de programación virtualizado Permite la ejecución de programas Java ejecutables multiplataforma Programación concurrente
Programación Concurrente en Java: Threads
Departamento de Sistemas Informáticos y Computación Universidad Complutense de Madrid 7 de mayo de 007 Ejemplos de programación concurrente En un sistema operativo, diversos programas compiten por los
TEMA 5: Control de la Concurrencia en Java (API Estándar)
TEMA 5: Control de la Concurrencia en Java (API Estándar) CONTENIDO Exclusión Mutua con código synchronized. Exclusión Mutua con métodos synchronized. Protocolos de Control de la Exclusión Mutua. Interbloqueos
Multienhebrado en Java Un toque de sincronización Transporte en Java Ejemplo conjunto
Java y multiprogramación sobre red Sistemas Distribuidos ITInformática (UVA) César Llamas Bello 2003 Índice Multienhebrado en Java Un toque de sincronización Transporte en Java Ejemplo conjunto 26/02/2003
Java: Programación Multithread
Qué es un thread? Java: Programación Multithread Hasta el momento hemos desarrollado programas secuenciales con un único thread: en cualquier instante durante la ejecución de un programa hay un único punto
Procesamiento paralelo con hilos de Java
Procesamiento paralelo con hilos de Java Tabla de contenidos 1. Soporte para hilos en Java... 1 2. Creación y control de un hilo... 2 2.1. Métodos de creación de un hilo... 2 2.2. Control de hilos mediante
Concurrencia Monitores. Guillermo Román Díez
Concurrencia Monitores Guillermo Román Díez [email protected] Universidad Politécnica de Madrid Curso 2016-2017 Guillermo Román, UPM CC: Monitores 1/25 Recursos Compartidos Pregunta La especificación de
PROGRAMACIÓN EN JAVA. { una línea para definir, crear o ejecutar ; }
PROGRAMACIÓN EN JAVA { una línea para definir, crear o ejecutar ; } JFC Y API SPECIFICATIONS OBJECT INTERFACE ABSTRACT IMPLEMENTS EXTENDS NEW EXTENDS (Hasta que una clase derivada deje de ser ABSTRACT)
Programación Concurrente en Java
Hebras y monitores Departamento de Sistemas Informáticos y Programación Universidad Complutense de Madrid 21 de marzo de 2006 Threads Extendiendo la clase java.lang.thread. public class PrThread extends
Tema 4: Control del flujo de ejecución: Excepciones y Threads. Programación Orientada a Objetos. Marcos López Sanz
Tema 4: Control del flujo de ejecución: Excepciones y Threads Programación Orientada a Objetos Marcos López Sanz Máster en Informática Gráfica, Juegos y Realidad Virtual MARCOS LOPEZ SANZ Excepciones Def.:
Guillermo Román Díez
Concurrencia Creación de Procesos en Java Guillermo Román Díez [email protected] Universidad Politécnica de Madrid Curso 2016-2017 Guillermo Román, UPM CC: Creación de Procesos en Java 1/18 Concurrencia
Por ejemplo, el siguiente error conduce inmediatamente a un deadlock:
Monitores Los semáforos, son el equivalente a las instrucciones goto y el manejo de apuntadores en los lenguajes de programación imperativos: son muy susceptibles a errores. Su utilización exige disciplina.
Concurrencia en Android LSUB, GYSC, URJC
Concurrencia en Android LSUB, GYSC, URJC Repaso de concurrencia en Java Crear un thread Instanciar un Thread, con el método run sobreescrito Intanciar un objeto que cumpla el interfaz Runnable y pasárselo
Federico Peinado www.federicopeinado.es
Federico Peinado www.federicopeinado.es Depto. de Ingeniería del Software e Inteligencia Artificial disia.fdi.ucm.es Facultad de Informática www.fdi.ucm.es Universidad Complutense de Madrid www.ucm.es
Diseño de algoritmos paralelos
PROGRAMACIÓN CONCURRENTE TEMA 7 Diseño de algoritmos paralelos ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA INFORMÁTICA DEPARTAMENTO DE CIENCIAS DE LA COMPUTACIÓN DISEÑO DE ALGORITMOS PARALELOS - TEMA 7.2 Algoritmos
Concurrencia en Java
Concurrencia en Java Herramientas proporcionadas por Java La Máquina Virtual (JVM) Pedro Pablo Gómez Martín La clase Thread Clase principal con la que conseguir concurrencia. La llamada a su método start()
Sincronización de Threads
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.
INTRODUCCION A LA PROGRAMACION EN JAVA
Departament d Arquitectura de Computadors INTRODUCCION A LA PROGRAMACION EN JAVA Índice Paso de parámetros en tiempo de ejecución Métodos static Atributos static Try-catch-finally Throws/throw 2 Paso de
dit UPM Tema 2: Concurrencia /threads (java) Análisis y diseño de software José A. Mañas
Análisis y diseño de software dit UPM Tema 2: Concurrencia /threads (java) José A. Mañas 11.3.2018 referencias The Java tutorials: Concurrency Oracle Java Threads Scott Oaks & Henry Wong O'Reilly Media;
Introducción a los Threads Java
75-62 Técnicas de Programación Concurrentes II Lic. Ing. Osvaldo Clúa 2014 Facultad de Ingeniería Universidad de Buenos Aires Introducción a los Threads Java Para crear un nuevo Thread Se extiende la clase
Programación concurrente y semáforos en Java
Programación concurrente y semáforos en Java En Java es posible ejecutar tareas en paralelo, utilizando hebras de control (hilos, threads). Este modo de programación permite tener un espacio de memoria,
Introducción a Java LSUB. 30 de enero de 2013 GSYC
Introducción a Java LSUB GSYC 30 de enero de 2013 (cc) 2013 Laboratorio de Sistemas, Algunos derechos reservados. Este trabajo se entrega bajo la licencia Creative Commons Reconocimiento - NoComercial
Sistemas Operativos Tema 5. Procesos. 1998-2012 José Miguel Santos Alexis Quesada Francisco Santana
Sistemas Operativos Tema 5. Procesos 1998-2012 José Miguel Santos Alexis Quesada Francisco Santana 1 Contenidos Concepto de proceso Estructuras de datos: BCP y colas de procesos Niveles de planificación
En este capitulo se estudiarán los conceptos relacionados a métodos, como lo son sobrecarga, métodos estáticos.
Lección 3: Creando clases 1. Definición de métodos 2. Sobrecarga de métodos 3. Definición de constructores 4. Creando miembros estáticos 5. Construcción e inicialización de objetos Objetivos En este capitulo
Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos
Unidad Didáctica 3 Tipos genéricos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Definición de tipo genérico Hablamos de un tipo genérico cuando el tipo en cuestión depende
Tema 7: Polimorfismo. Índice
Tema 7: Polimorfismo Antonio J. Sierra Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos. Recursividad. Control de acceso. Static. Final. Argumento
PROGRAMACIÓN EN JAVA
SISTEMAS INFORMÁTICOS INDUSTRIALES curso 2007-2008 PROGRAMACIÓN EN JAVA PRÁCTICA 3: Comunicación entre tareas. Modelo productor / consumidor. Objetivos Implementar una aplicación en Java en la que existan
Concurrencia. Programación Concurrente. Espera ocupada. Primitivas IPC con bloqueo
Concurrencia Programación Concurrente Espera ocupada. Primitivas IPC con bloqueo Programación concurrente Los lenguajes concurrentes tienen elementos para: Crear procesos Sincronizar procesos Comunicar
Multitarea en Java. Rafa Caballero - UCM
Multitarea en Java Rafa Caballero - UCM Programa Monoproceso (monotarea) En cada momento hay una única instrucción ejecutándose Se dice que el programa es monotarea, o monoproceso o monohebra (o single
Concurrencia, exclusión mutua y sincronización. Capítulo 5 HungriaBerbesi
Concurrencia, exclusión mutua y sincronización Capítulo 5 HungriaBerbesi 1 Concurrencia Múltiples aplicaciones Aplicaciones estructuradas Estructura del sistema operativo 2 Concurrencia 3 Sección Crítica:
Colas. 5.1 Implementación
Capítulo 5 Colas Las colas al igual que las pilas son un tipo especial de listas en las cuales los elementos se insertan por un lado y se eliminan por el otro. Es decir se sacan en el mismo orden en que
PROGRAMACION CONCURRENTE Y DISTRIBUIDA. III.3 Concurrencia con Java: Sincronización
PROGRAMACION CONCURRENTE Y DISTRIBUIDA III.3 Concurrencia con Java: Sincronización J.M. Drake L.Barros 1 Recursos de Java para sincronizar threads Todos los objetos tienen un bloqueo asociado, lock o cerrojo,
Java nos ofrece la clase Thread y la interfaz Runable que permiten que varios procesos estén funcionando de forma concurrente.
Threads (hilos) Java nos ofrece la clase Thread y la interfaz Runable que permiten que varios procesos estén funcionando de forma concurrente. Conceptos: Proceso (thread o hilo): es un programa en ejecución
Programación Concurrente Recopilación de teoría referente a la materia
UNIVERSIDAD AMERICANA Programación Concurrente Recopilación de teoría referente a la materia Ing. Luis Müller Esta es una recopilación de la teoría referente a la asignatura Programación Concurrente, a
PROGRAMACIÓN ORIENTADA A OBJETOS 10/02/2009. Examen de Java. Nombre: DNI: Titulación:
Examen de Java Nombre: DNI: Titulación: 1. Cómo podemos compilar desde la línea de comandos la clase Java A que utiliza una librería empaquetada bd.jar? 2. Indica si es correcto el siguiente código. Justifica
Tema 2: Aplicaciones Multihilo, Cliente Servidor
Servidores Multiproceso PID=1 atiende A Tema 2: Aplicaciones Multihilo, Cliente Servidor 1 t=1. A puja t=1. B puja Multiples Clientes Concurrente Web Main () for (;;) Web new_connection = accept (i, NULL,
Prueba final, parte 2 - Clave a Concurrencia Segundo semestre Universidad Politécnica de Madrid
Apellidos: Nombre: DNI/NIE: Normas Prueba final, parte 2 - Clave a Concurrencia 2013-2014 - Segundo semestre Universidad Politécnica de Madrid Este es un cuestionario que consta de 6 preguntas en 5 páginas.
Concurso: Cuánto sabes de JAVA?
Concurso: Cuánto sabes de JAVA? Motivación: o Para cambiar el ritmo de las jornadas y que no todas las actividades sean charlas o Recordar conocimientos y aprender algo nuevo. o Las preguntas pueden ayudarnos
Tema 3. Programación orientada a objetos en Java (Parte 1)
Programación en Java Tema 3. Programación orientada a objetos en Java (Parte 1) Luis Rodríguez Baena Facultad de Informática Clases y objetos (I) Clase Cojunto de datos (atributos) y funciones (métodos)
MECANISMOS DE SINCRONIZACIÓN PROGRAMACIÓN CONCURRENTE Y PARALELA
MECANISMOS DE SINCRONIZACIÓN PROGRAMACIÓN CONCURRENTE Y PARALELA Sincronización El problema de la sincronización de hilos tiene lugar cuando varios hilos intentan acceder al mismo recurso o dato. A la
PROGRAMACION CONCURRENTE
PROGRAMACION CONCURRENTE Ejemplos III: Sopa de Letras 1 Objetivo Mostrar las diferentes estrategias que puede seguir un gestor que tiene que ejecutar una tarea compleja que puede ser paralelizada en diferentes
Aspectos de los LP. Diseño de compiladores. Estático vs. Dinámico. Estático vs. Dinámico. Scope. Scope 24/03/2015
Aspectos de los LP Diseño de compiladores Lenguajes de Programación Antes de comenzar con la construcción de un compilador, debemos comprender los conceptos basicos del lenguaje de programación con el
Modulo 11. Clases y Objetos en Java
El siguiente texto es una traducción no oficial del documento publicado por el grupo JEDI, Introduction to Programming 1, no pretende en ningún momento reemplazar los contenidos generados por este grupo.
Programación Concurrente con Java
Programación Concurrente con Java Diseño de Sistemas Operativos Facultad de Informática Juan Pavón Mestras Dep. Sistemas Informáticos y Programación Universidad Complutense Madrid Concurrencia En el mundo
Natalia Partera Jaime Alumna colaboradora de la asignatura
Programación Concurrente y de Tiempo Real Guión de prácticas 6: Programación en Java de algoritmos de control de la Exclusión Mutua con variables comunes Natalia Partera Jaime Alumna colaboradora de la
Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas
2 - Introducción al lenguaje Java, identificadores y comentarios. Carlos Montenegro Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas 1. Introducción: Java tiene como todos
Universidad de Cantabria
Polimorfismo Pedro Corcuera Dpto. Matemática Aplicada y Ciencias de la Computación Universidad de Cantabria [email protected] Objetivos Comprender el mecanismo del polimorfismo Aprender a utilizar el
CAPÍTULO 2. PROCESOS VS. HILOS
CAPÍTULO 2. PROCESOS VS. HILOS El objetivo de este capítulo es el de discutir con un poco más de profundidad todo lo relacionado con el concepto de proceso que sea relevante para el estudio de la programación
75-62 Técnicas de Programación Concurrente II 2004 java Threads
75-62 Técnicas de Programación Concurrente II 2004 java Threads FIUBA Ing. Osvaldo Clúa Bibliografía: tutorial de Java en http://java.sun.com Un buen libro (algo teórico) es Garg: Concurrent and Distributed
Tareas en segundo plano AsyncTask Thread
Tareas en segundo plano AsyncTask Thread Programació De Dispositius Mòbils PRDM Cristobal Raya Giner 2015 Hilos de ejecución En una aplicación Android, todas las actividades, los servicios y los broadcast
Estructuras de control selectivas
Práctica 3 Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 2.0.2 Concepto de sentencia y estructura de control El cuerpo de los métodos
Clases y herencia. FJP Unidad 8. Diseño de clases
Clases y herencia FJP Unidad 8 Encapsulamiento Diseño de clases El encapsulamiento provee protección de atributos y métodos definidos en una clase de forma tal que comportamiento de objetos de una clase
Concurrencia en Java
Concurrencia en Java Concurrencia y Distribución Programación Avanzada Posgrado en Ciencia e Ingeniería de la Computación, UNAM 1. El mecanismo de threads Una aplicación Java o applet puede contener secciones
Sistemas Operativos. (Procesos)
Sistemas Operativos (Procesos) 2.1 Procesos Def: Un proceso es un programa en ejecución. 2.2 Estados de procesos El estado de un proceso define su actividad actual. Durante su existencia, un proceso pasa
Clases abstractas e interfaces en Java
Clases abstractas e interfaces en Java Clases abstractas public abstract class Figura { private String _nombre; public Figura (string nombre) { _nombre = nombre; final public boolean mayor_que (Figura
Programación Concurrente en Java
Programación Concurrente en Java Curso 2006-2007 9/2/2007 Prog. Distribuida Bajo Internet Qué es la Programación Concurrente? Diseño basado en varias actividades independientes Conceptualmente se ejecutan
Cena de filosofos y sincronizacion java
Programación concurrente y Distribuída Curso 2011-12 Miguel Telleria, Laura Barros, J.M. Drake telleriam AT unican.es Computadores y Tiempo Real http://www.ctr.unican.es Objetivos Presentaros la aplicación
