Programación multihilo

La programación multihilo o multithreading consiste en desarrollar programas o aplicaciones con varios hilos.

Programación multihilo (Plataforma Moodle, apartados 1 a 6)

Multitarea e Hilos, fácil y muchas ventajas

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

Lifecycle of a thread

Oracle Documentation: Class Thread

Ejemplo: Programa de ejemplo lanzador de threads

Joining Threads in Java

Ejemplo: Hilo de cuenta atrás

Ejemplo: Prioridades de hilos

Multitarea e Hilos en Java con ejemplos

Ejemplo de Procesar compra: código en github

javac threadsJarroba/*.java
java threadsJarroba/MainThread

Multitarea en Android

Deja una respuesta