Programación multihilo
La programación multihilo o multithreading consiste en desarrollar programas o aplicaciones con varios hilos.
Programación multihilo (plataforma Moodle)
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.