Si lo que se desea es parar o bloquear temporalmente un thread (pasar al estado Not
Runnable). existen varias formas de hacerlo:
1. Ejecutando el método sleepf) de la clase Thread. Esto detiene el thread un tiempo pre-
establecido. De ordinario el método sleep() se llama desde el método run().
2. Ejecutando el método waitf) heredado de la clase Object. a la espera de que suceda algo
que es necesario para poder continuar. El thread volverá nuevamente a la situación de
runnable mediante los métodos notifyQ o notifyAllQ, que se deberán ejecutar cuando
cesa la condición que tiene detenido al thread (ver Apartado 6.3. en la página 131).
3. Cuando el thread está esperando para realizar operaciones de Entrada Salida o
Input Output (E/S ó I/O).
4. Cuando el thread está tratando de llamar a un método synchronized de un objeto, y dicho
objeto está bloqueado por otro thread (véase el Apartado 6.3)
Un thread pasa automáticamente del estado Not Runnable a Runnable cuando cesa alguna de
las condiciones anteriores o cuando se llama a notify() o notifyAUQ.
La clase Thread dispone también de un método stop(). pero no se debe utilizar ya que puede
provocar bloqueos del programa (deadlock). Hay una última posibilidad para detener un thread. que
consiste en ejecutar el método suspendQ. El thread volverá a ser ejecutable de nuevo ejecutando el
método resumef). Esta última fonna también se desaconseja, por razones similares a la utilización
del método stop().
El método sleepf) de la clase Thread recibe como argumento el tiempo en milisegundos que
ha de permanecer detenido. Adicionalmente. se puede incluir un número entero con un tiempo
adicional en nanosegnndos. Las declaraciones de estos métodos son las siguientes:
public static void sleep(long millis) throws
InterruptedException
public static void sleep(long millis, int
nanosecons) throws InterruptedException
Considérese el
siguiente ejemplo:
System.out.println
("Contador de segundos");
int count=0;
public void run () {
try {
try {
sleep(lOOO);
System.out.println(count++)
;
} catch (InterruptedException e){}
} catch (InterruptedException e){}
}
No hay comentarios:
Publicar un comentario