Como ya todos sabemos los hilos se usan para poder dividir las tareas que va a realizar nuestra aplicación. Si le asignamos un hilo a cada tarea, vamos a poder ser capaces de manejarlos a nuestro antojo, a diferencia de que si lo agrupáramos en métodos o clases, ya que la clase Thread y la interfaz Runnable de java nos permite controlar aun mas a fondo cada tarea. Por ejemplo, si tengo una tarea dentro de mi programa, que en cierto momento necesita parar por un rato y esperar a q termine otra tarea para que siga; o simplemente quiero darle prioridades a las tareas o tal ves ejecutarlas todas al mismo tiempo. Pues para todo esto -y otras cosas que aun no me entero =P- están los hilos.

Duke_Thread

Poner un ejemplo de un programa que use hilos es bastante sencillo, así que ahora –y para no olvidarme- me centraré en los métodos wait() y notify() de la clase Object. Según lo que estuve leyendo, entendí que los métodos wait() y notify() son la contraparte de los métodos suspend() y resume() de la clase Thread, los cuales están deprecados por estas razones.

En si, lo que hace el método suspend(), como su nombre lo dice, es suspender el hilo y resume() lo hace continuar. Ahora como ya dije antes, estos métodos están deprecados. Así que el único camino que nos queda es usar wait() y notify(). El uso de estos métodos no esta en simplemente llamarlos, bueno en realidad si =P, pero solo que debes tener lógica de cuando y como los llamas y por lo general vas a necesitar de una variable bandera para que uno se zafe del otro.

Generalmente siempre se encontraran con líneas como estas:

while(true)
{
System.out.println("Hola IFX");

synchronized(this)
{
while(band == true)
{
System.out.println("Se detuvo");
wait();
}
}

}

Ahora como verán hay un while dentro de otro while, esto es para que cualquier cambio de la variable band, no vaya a producir que se ejecute el “Hola IFX”, ya que es lo que no queremos que pase.

A continuación pondré unos ejemplos en un archivo rar que podrán bajar. Estos ejemplos que son 3, son prácticamente los mismos, solo que con pequeñas variaciones para que puedan darse cuenta cual es la diferenia entre poner while o poner if. Estos ejemplos son recontra simples, y por esto me evite el colocar el ejemplo de productor-consumidor, que es el ejemplo clásico para wait() y notify(), el productor-consumidor es también bastante simple, solo que cuando recién empiezas en esto, como que te marea un poco y pues el ejemplo que esta vez hice, solo usa el System.out.println() y lo usa para que puedan ver como funcionan estos métodos; mejor dicho es una antesala al productor-consumidor, bueno al menos así lo veo yo =P.

Algo importante que deben saber es que, si se va a usar wait() o notify(), es imprecindible el bloqueo del objeto compartido. Esto se hace con synchronized, sino marcara un IllegalMonitorStateException. Sin notify() el hilo no pase de wait a ready state.

Ahora si, bájense los ejemplos de aquí; pero antes me olvide de decir que:

Comenta pezweon!!! =P