Programación multihilo
La programación multihilo o multithreading consiste en desarrollar programas o aplicaciones con varios hilos.
Programación multihilo (punto 6 de unidad 2)
Clase Thread:
Hilo del programa principal:
/**************************************************************************** * Este programa Identifica el hilo que ejecuta el método main() de la típica * aplicación de consola "¡Hola mundo!" * Se utilizan para ello los métodos: currentThread() y getName() de la clase Thread */ public class Main { public static void main(String[] args) { System.out.println("¡Hola mundo!\n"); //imprime "¡Hola mundo!" en la Salida Thread miHilo = Thread.currentThread(); //obtiene el hilo donde se está ejecutando este método mediante la //función Thread.currentThread(), y lo almacena en la variable local miHilo //imprime el nombre del hilo en la Salida (función getName()) System.out.println("Por defecto, el hilo que ejecuta el método main() " +"de mi programa se llama '" + miHilo.getName() + "'\n"); } }
Ejecución:
javac Main.java java Main
Creación de un hilo con Thread:
public class Saludo extends Thread { //clase que extiende a Thread public void run() { // se redefine el método run() con el código asociado al hilo System.out.println("Saludo desde un hilo extendiendo thread!"); } public static void main(String args[]) { //se crea un objeto Thread, el hilo hilo1 Saludo hilo1 = new Saludo(); //invoca a start() y pone en marcha el hilo hilo1 hilo1.start(); } }
Creación de varios hilos:
public class HiloEjemplo1 extends Thread { // constructor public HiloEjemplo1(String nombre) { super(nombre); System.out.println("CREANDO HILO:" + getName()); } // metodo run public void run() { for (int i = 0; i < 5; i++) System.out.println("Hilo:" + getName() + " C = " + i); } // public static void main(String[] args) { HiloEjemplo1 h1 = new HiloEjemplo1("Hilo 1"); HiloEjemplo1 h2 = new HiloEjemplo1("Hilo 2"); HiloEjemplo1 h3 = new HiloEjemplo1("Hilo 3"); h1.start(); h2.start(); h3.start(); System.out.println("3 HILOS INICIADOS..."); }// main }// HiloEjemplo1
Propiedades de un hilo:
public class HiloEjemplo2 extends Thread { public void run() { System.out.println( "Dentro del Hilo : " + Thread.currentThread().getName() + "\n\tPrioridad : " + Thread.currentThread().getPriority() + "\n\tID : " + Thread.currentThread().getId() + "\n\tHilos activos: " + Thread.currentThread().activeCount()); } // public static void main(String[] args) { Thread.currentThread().setName("Principal"); System.out.println(Thread.currentThread().getName()); System.out.println(Thread.currentThread().toString()); HiloEjemplo2 h = null; for (int i = 0; i < 3; i++) { h = new HiloEjemplo2(); //crear hilo h.setName("HILO " + i); //damos nombre al hilo h.setPriority(i + 1); //damos prioridad h.start(); //iniciar hilo System.out.println( "Informacion del " + h.getName() + ": "+ h.toString()); } System.out.println("3 HILOS CREADOS..."); System.out.println("Hilos activos: " + Thread.activeCount()); }// }// HiloEjemplo2
Interfaz Runnable:
/*Crea un hilo implementando la interfaz Runnable*/ public class Saludo implements Runnable { //clase que implementa a Runnable public void run() { //se redefine el método run()con el código asociado al hilo System.out.println("¡Saludo desde un hilo creado con Runnable!"); } public static void main(String args[]) { Saludo miRunnable = new Saludo(); //se crea un objeto Saludo Thread hilo1= new Thread(miRunnable); //se crea un objeto Thread (el hilo hilo1) pasando como argumento // al constructor un objeto Saludo hilo1.start(); //se invoca al método start() del hilo hilo1 } }
“implements Runnable” vs “extends Thread” in Java
Oracle Documentation: Class Thread
Ejemplo: Programa de ejemplo lanzador de threads
Ejemplo: Hilo de cuenta atrás
Multitarea e Hilos, fácil y muchas ventajas
Multitarea e Hilos en Java con ejemplos
Ejemplo de Procesar compra: código en github
wget https://github.com/jarroba/ThreadsJarroba/archive/refs/heads/master.zip unzip master.zip cd ThreadsJarroba-master/src javac threadsJarroba/*.java java threadsJarroba/MainThread
Deja una respuesta
Lo siento, debes estar conectado para publicar un comentario.