• Document: Multitarea en Java. Rafa Caballero - UCM
  • Size: 572.71 KB
  • Uploaded: 2019-01-13 11:51:45
  • Status: Successfully converted


Some snippets from your converted document:

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 threading). Rafa Caballero - UCM Programa multiproceso En algún punto el programa se divide en varios procesos (threads) que se ejecutan (aparentemente) de manera simultánea Programa multiproceso, multitarea, multihebra (o multithreading) Rafa Caballero - UCM Rafa Caballero - UCM ¿Para qué? Programas que tengan que realizar varias tareas de manera simultánea Programas en los que la ejecución de una parte requiera tiempo y no deba detener el resto del programa ¿Para qué ? Ejemplo 1 Programa que controla sensores en una fábrica: Los procesos que se encargan de controlar sensores diferentes son independientes y los sensores deben controlarse de manera simultánea Temperatura Combustible Programa Presión Tiempo Rafa Caballero - UCM Rafa Caballero - UCM ¿Para qué? Ejemplo 2 Durante la impresión de un documento (tarea que puede tomar tiempo) el programa puede y debe continuar ejecutándose. Programa Rafa Caballero - UCM Multitarea en Java Idea: Definir clases especiales para las tareas que requieran ejecutarse en una hebra de ejecución (thread) separada Estas clases deben incluir la función especial public void run(), equivalente a main() pero para hebras Los objetos de la clase serán inicializados desde otra clase con el método start() Clase para multitarea 2 Métodos: n Mediante herencia (extensión) de la clase java.lang.Thread n Mediante la implementación del interfaz java.lang.Runnable Rafa Caballero - UCM Rafa Caballero - UCM Ejemplo: extensión de Thread El programa irá escribiendo dos sucesiones ascendentes de números simultáneamente Una hebra por cada contador Ejemplo: Contadores (Versión 1) class Contador extends Thread { private int inicio,fin; // valor inicial y final del contador private String nombre; // nombre de la hebra // constructor con los valores iniciales y final y el nombre public Contador(int desde, int hasta, String id) { inicio = desde; fin = hasta; nombre = id; } // función principal public void run() { System.out.println(nombre+ " empieza..."); for (int i = inicio; i <= fin; i++) { System.out.print (nombre+" dice: "+i + ". "); try{ sleep(10); // paramos una centesima de segundo } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println(nombre + " acaba."); } Rafa Caballero - UCM } Ejemplo: Contadores (Versión 1) // clase principal: esta clase inicializara las hebras public class principal { static public void main(String[] args) { // al declararlas NO comienzan Contador hebraA = new Contador(1, 10, "HebraA"); Contador hebraB = new Contador(20, 30, "HebraB"); System.out.println("Vamos a iniciar las dos hebras"); // ahora comienzan hebraA.start(); hebraB.start(); System.out.println("Hebras inicializadas"); // hacemos un poco de tiempo antes de despedirnos for (int i=0; i<50000000; i++) ; System.out.println("Programa principal terminado"); } } // principal Rafa Caballero - UCM Ejemplo: contadores Una ejecución del programa: Vamos a iniciar las dos hebras Hebras inicializadas HebraA empieza... HebraA dice: 1. HebraB empieza... HebraB dice: 20. HebraA dice: 2. HebraB dice: 21. HebraA dice: 3. HebraB dice: 22. HebraA dice: 4. Programa principal terminado HebraB dice: 23. HebraA dice: 5. HebraB dice: 24. HebraA dice: 6. HebraB dice: 25. HebraA dice: 7. HebraB dice: 26. HebraA dice: 8. HebraB dice: 27. HebraA dice: 9. HebraB dice: 28. HebraA dice: 10. HebraB dice: 29. HebraA acaba. HebraB dice: 30. HebraB aca

Recently converted files (publicly available):