##
SUSPENDER Y REANUDAR THREADS

Una vez que se para un thread, ya no se puede rearrancar con el comando start(), debido a que stop() concluirá la ejecución del thread. Por ello, en ver de parar el thread, lo que podemos hacer es dormirlo, llamando al método sleep(). El thread estará suspendido un cierto tiempo y luego reanudará su ejecución cuando el límite fijado se alcance. Pero esto no es útil cuando se necesite que el thread reanude su ejecución ante la presencia de ciertos eventos. En estos casos, el método suspend() permite que cese la ejecución del thread y el método resume() permite que un método suspendido reanude su ejecución. En la siguiente versión de nuestra clase contador, App2Thread.java, modificamos el applet para que utilice los métodos suspend() y resume():

    public class App2Thread extends Applet implements Runnable {
        Thread t;
        int contador;
        boolean suspendido;

        ...

        public boolean mouseDown( Event evt,int x,int y ) {
            if( suspendido )
                t.resume();
            else
                t.suspend();
            suspendido = !suspendido;

            return( true );
            }
        ...

Para controlar el estado del applet, hemos introducido la variable `suspendido`. Diferenciar los distintos estados de ejecución del applet es importante porque algunos métodos pueden generar excepciones si se llaman desde un estado erróneo. Por ejemplo, si el applet ha sido arrancado y se detiene con stop(), si se intenta ejecutar el método start(), se generará una excepción IllegalThreadStateException.

|  | ##### [Anterior] [Indice] [Siguiente]