Los hilos en java son una serie de procesos que se ejecutan simultáneamente o más conocido como proceso concurrente, que puede estar en 4 estados diferentes:

Nace: hilo=new Thread();

Inicia: hilo.start();

Se ejecuta: el proceso está corriendo o tiene el control del procesador.

Bloqueo: Cuando el hilo está, durmiendo, suspendido o en estado de espera.

En este proceso, se maneja su clase: Thread; con algunos de sus métodos: : start(), stop(), suspend(), run(), sleep(), getname(), setname(), toString(), etc.

Y sus constructores: El primero lo deja sin nombre por ej: Thread hilo=new Thread();

Y el segundo, al hilo se le asigna un nombre por ej: Thread hilo=new Thread(“Nombre del hilo”);

Aquí va un ejemplo básico, en donde 3 hilos intentarán modificar el mismo objeto, pero se les instancia un bloqueo para que mientras un hilo esté modificando el objeto, ningún otro hilo interfiera. En este caso, el rango que tiene cada hilo es de 3 líneas, que fueron configuradas en el for.

Usaremos StringBuffer si la cadena de caracteres puede cambiar y tenemos varios hilos de ejecución. En este caso, dejo que me muestre sólo 3 veces la letra del hilo correspondiente.


package ejemhilos;

class <b>Main </b>

{

public static void <b><i>main</i></b>(String [] args)

{

runThread r = new runThread();

r.setSb("A");

Thread t1 = new Thread(r);

Thread t2 = new Thread(r);

Thread t3 = new Thread(r);

t1.setName("Hilo 1");

t2.setName("Hilo 2");

t3.setName("Hilo 3");

t1.start();

t2.start();

t3.start();

}

}

class <b>runThread</b> extends Thread

{

StringBuffer sb;

public void <b>run</b>()

{

synchronized (this)

{

for (int x=0; x<3; x++)

{

System.out.println("Hilo: " + Thread.currentThread().getName() + " Valor de sb:" + sb.toString() + " Valor de x:" + x);

}

// Consigo el codigo Ascii para obtener la siguiente letra del alfabeto

char c = sb.charAt(0);

int asciiNumber = (char)c; asciiNumber++;

// Convierto el codigo Ascii en un caracter

char d = (char)asciiNumber;

String cadena = String.valueOf(d);

sb = new StringBuffer(cadena);

System.out.println("Hilo " + Thread.currentThread().getName()+ " terminado! Ahora sb vale " + cadena);

}

}

void <b>setSb</b>(String a) { this.sb= new StringBuffer(a); }

}

Lo que me mostrará, los siguientes resultados

Scrip