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.
[code language=»java»]
package ejemhilos;
class Main
{
public static void main(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 runThread extends Thread
{
StringBuffer sb;
public void run()
{
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 setSb(String a) { this.sb= new StringBuffer(a); }
}
[/code]
Lo que me mostrará, los siguientes resultados
Esto es realmente bueno, eres un blogger muy profesional. Me he unido a tu RSS y espero disfrutar más cosas en este gran blog. Además, !he compartido tu sitio en mis redes sociales!
Saludos