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