UNIDAD III.- Programación Concurrente
Transcripción
UNIDAD III.- Programación Concurrente
Tópicos Selectos de Programación UNIDAD III.- Programación Concurrente Multitarea – La multitarea se refiere a la capacidad de una computadora para ejecutar multiples trabajos concurrentemente (sistema operativo UNIX) Multihilo – La capacidad multihilos se refiere a múltiples hilos controlados por un solo programa (navegador) Hilo – – – – Una instancia de la clase java.lang.Thread. Un thread es un objeto. Un hilo de ejecución es un proceso con su propio stack. El hilo principal: main(). Métodos de Thread: – start() – yield() – sleep() – run() public void run() { // El código del hilo va aquí } Creación de un Hilo – – Heredando de java.lang.Thread Implementando la interfaz Runnable Rafael Rivera López 1 Tópicos Selectos de Programación Heredando de Thread class MiHilo extends Thread { public void run() { System.out.println("Esto se ejecuta como un subproceso"); } } – El método run() no lleva parámetros: class MiHilo extends Thread { public void run() { System.out.println("Esto se ejecuta como un subproceso"); } public void run(String s) { System.out.println("String en run es " + s); } } – El método sobrecargado es ignorado por el Thread. Es un método más. Implementando Runnable class MiRunnable implements Runnable { public void run() { System.out.println("Esto se ejecuta como un subproceso"); } } MiHilo t = new MiHilo( ); MiRunnable r = new MiRunnable(); Thread t = new Thread(r); – El objeto Runnable pasado al constructor de Thread es llamado “el destino” Rafael Rivera López 2 Tópicos Selectos de Programación Ejemplo: public class TestThreads { public static void main (String [] args) { MiRunnable r = new MiRunnable(); Thread foo = new Thread(r); Thread bar = new Thread(r); Thread bat = new Thread(r); } } Formas del Constructor de Thread – – – – Thread() Thread(Runnable target) Thread(Runnable target, String name) Thread(String name) Estados de un Thread – – – – Estado new: Cuando se instanció la clase, el thread no es alive. Estado alive: Cuando el método start() es llamado. Estado dead : Cuando el método run() termina. Método isAlive() para determinar si un hilo esta iniciado y no ha concluido su ejecución. Iniciando un Thread t.start(); – – – Un nuevo hilo de ejecución inicia (con un nuevo stack). El hilo se mueve del estado new al estado runnable. Cuando el hilo tiene oportunidad de ejecutarse, el método run() corre. Rafael Rivera López 3 Tópicos Selectos de Programación Ejemplo: class OtroRunnable implements Runnable { public void run() { for(int x =1; x < 6; x++) { System.out.println("Runnable corriendo"); } } } public class TestThreads { public static void main (String [] args) { OtroRunnable r = new OtroRunnable(); Thread t = new Thread(r); t.start(); } } ¿Cual es la salida? Otro Ejemplo: class NameRunnable implements Runnable { public void run() { System.out.println("Runnable corriendo"); System.out.println("Ejecutandose porby " + Thread.currentThread().getName()); } } public class NameThread { public static void main (String [] args) { NameRunnable nr = new NameRunnable(); Thread t = new Thread(nr); t.setName("Pedro"); t.start(); } } ¿Cual es la salida? Rafael Rivera López 4 Tópicos Selectos de Programación Otro Ejemplo: public class NameThread { public static void main (String [] args) { NameRunnable nr = new NameRunnable(); Thread t = new Thread(nr); t.start(); } } ¿Cual es la salida? Otro Ejemplo: public class NameThreadTwo { public static void main (String [] args) { System.out.println("El hilo es " + Thread.currentThread().getName()); } } ¿Cual es la salida? Hilos y la memoria Rafael Rivera López 5