932

Capítulo 23 Subprocesamiento múltiple

Un objeto 

TareaImprimir

 se ejecuta cuando un subproceso llama al método 

run

 de 

TareaImprimir

. En 

las líneas 24 y 25 se muestra un mensaje, indicando el nombre de la tarea actual en ejecución y que ésta va a 
quedar inactiva durante 

tiempoInactividad

 milisegundos. En la línea 26 se invoca al método 

staticsleep

de la clase 

Thread

, para colocar el subproceso en el estado 

en espera sincronizado durante la cantidad especifi cada de

tiempo. En este punto, el subproceso pierde al procesador y el sistema permite que otro subproceso se ejecute. 
Cuando el subproceso despierta, vuelve a entrar al estado 

ejecutable. Cuando el objeto 

TareaImprimir

 se asigna 

a otro procesador de nuevo, en la línea 35 se imprime un mensaje indicando que la tarea dejó de estar inactiva, y 
después el método 

run

 termina. Observe que la instrucción 

catch

 en las líneas 28 a 32 es obligatoria, ya que el 

método

sleep

 podría lanzar una excepción 

InterruptedException

 (verifi cada) si se hace una llamada al méto-

do

interrupt

 del subproceso inactivo.

En la fi gura 23.5 se crean objetos 

Thread

 para ejecutar objetos 

TareaImprimir

. En las líneas 12 a 14 se 

crean tres subprocesos, cada uno de los cuales especifi ca un nuevo objeto 

TareaImprimir

 a ejecutar. En las líneas 

19 a 21 se hace una llamada al método 

start

 de 

Thread

 en cada uno de los subprocesos; cada llamada invoca al 

método

run

 del objeto 

Runnable

 correspondiente para ejecutar la tarea. En la línea 23 se imprime un mensaje 

indicando que se han iniciado todas las tareas de los subprocesos, y que el método 

main

 terminó su ejecución.

17

}

// fin del constructor de TareaImprimir

18

 19  

// el método run contiene el código que ejecutará un subproceso

20

public void

 run()

 21  

{

 22  

 

try

 // deja el subproceso inactivo durante tiempoInactividad segundos 

23   

{

 

24    

System.out.printf(

 "%s va a estar inactivo durante %d milisegundos.\n"

,

 25 

 

 

 

      

nombreTarea, tiempoInactividad );

 

26    

Thread.sleep( tiempoInactividad ); 

// deja el subproceso inactivo

27   

}

// fin de try

 28  

 

catch

 ( InterruptedException excepcion )

 29  

 

{

 

30    

System.out.printf(

"%s %s\n"

, nombreTarea,

 31 

 

 

 

      

"termino en forma prematura, debido a la interrupcion"

 );

 32  

 

}

// fin de catch

33    

 34  

 

// imprime el nombre de la tarea

35   

System.out.printf(

"%s termino su inactividad\n"

, nombreTarea ); 

 36  

}

// fin del método run

37

}

// fin de la clase TareaImprimir

Figura 23.4 

 |  La clase 

TareaImprimir

 permanece inactiva durante un tiempo aleatorio de 0 a 5 segundos. 

(Parte 2 de 2).

 1 

// Fig. 23.5: CreadorSubproceso.java

2

// Creación e inicio de tres subprocesos para ejecutar objetos Runnable.

3

import

 java.lang.Thread;

 4 
 5 

public class

 CreadorSubproceso

 6 

{

 7  

public static void

 main( String[] args )

 8  

{

 9   

System.out.println(

"Creacion de subprocesos"

 );

 10 
 11  

 

// crea cada subproceso con un nuevo objeto Runnable

12   

Thread subproceso1 = 

new

 Thread( 

new

 TareaImprimir( 

"tarea1"

 ) );

 13  

 

Thread subproceso2 = 

new

 Thread( 

new

 TareaImprimir( 

"tarea2"

 ) );

 14  

 

Thread subproceso3 = 

new

 Thread( 

new

 TareaImprimir( 

"tarea3"

 ) );

Figura 23.5  

|  Creación e inicio de tres subprocesos para ejecutar objetos 

Runnable

. (Parte 1 de 2).

23_MAQ_CAP_23_DEITEL.indd932

4/19/081:33:37AM