984

Capítulo 23 Subprocesamiento múltiple

•  El lenguaje de programación Ada, desarrollado por el Departamento de defensa de los Estados Unidos, hizo que 

las primitivas de concurrencia estuvieran disponibles ampliamente para los contratistas de defensa dedicados a la 
construcción de sistemas militares de comando y control.

•  Java pone las primitivas de concurrencia a disposición del programador de aplicaciones, a través del lenguaje y de 

las APIs. El programador especifi ca que una aplicación contiene subprocesos de ejecución separados, en donde cada 
subproceso tiene su propia pila de llamadas a métodos y su propio contador, lo cual le permite ejecutarse concurren-
temente con otros subprocesos, al mismo tiempo que comparte los recursos a nivel de aplicación (como la memoria) 
con estos otros subprocesos.

•  Además de crear subprocesos para ejecutar un programa, la JVM también puede crear subprocesos para realizar 

tareas de mantenimiento, como la recolección de basura.

Sección 23.2 Estados de los subprocesos: ciclo de vida de un subproceso

•  En cualquier momento dado, se dice que un subproceso se encuentra en uno de varios estados de subproceso.
•  Un nuevo subproceso empieza su ciclo cuando en el estado 

nuevo. Permanece en este estado hasta que el programa 

inicia el subproceso, con lo cual se coloca en el estado 

ejecutable. Se considera que un subproceso en el estado ejecu-

table está ejecutando su tarea.

•  Algunas veces, un subproceso 

ejecutable cambia al estado en espera mientras espera a que otro subproceso realice una 

tarea. Un subproceso 

en espera regresa al estado ejecutable sólo cuando otro subproceso notifi ca al subproceso en 

espera que puede continuar ejecutándose.

•  

Un 

subproceso 

ejecutable puede entrar al estado en espera sincronizado durante un intervalo específi co de tiempo. 

Regresa al estado 

ejecutable cuando ese intervalo de tiempo expira, o cuando ocurre el evento que está esperando.

•  

Un 

subproceso 

ejecutable puede cambiar el estado en espera sincronizado si proporciona un intervalo de espera opcio-

nal cuando está esperando a que otro subproceso realice una tarea. Dicho subproceso regresará al estado 

ejecutable

cuando otro subproceso se lo notifi que o cuando expire el intervalo sincronizado.

•  Un subproceso inactivo permanece en el estado 

en espera sincronizado durante un periodo designado de tiempo, 

después del cual regresa al estado 

ejecutable.

•  

Un 

subproceso 

ejecutable cambia al estado bloqueado cuando trata de realizar una tarea que no puede completarse 

inmediatamente, y debe esperar temporalmente hasta que se complete esa tarea. Al estado 

bloqueado cuando trata de 

realizar una tarea que no puede completarse inmediatamente, y debe esperar temporalmente hasta que se complete 
esa tarea. En ese punto, el subproceso bloqueado cambia al estado 

ejecutable, para poder continuar su ejecución. Un 

subproceso 

bloqueado no puede usar un procesador, aun si hay uno disponible.

•  

Un 

subproceso 

ejecutable entra al estado terminado cuando completa exitosamente su tarea, o termina de alguna otra 

forma (tal vez debido a un error).

•  A nivel del sistema operativo, el estado 

ejecutable de Java generalmente abarca dos estados separados. Cuando un 

subproceso cambia por primera vez al estado 

ejecutable desde el estado nuevo, el subproceso se encuentra en el estado 

listo. Un subproceso 

listo entra al estado en ejecución cuando el sistema operativo lo asigna a un procesador; a esto 

también se le conoce como despachar el subproceso.

•  En la mayoría de los sistemas operativos, a cada subproceso se le otorga una pequeña cantidad de tiempo del pro-

cesador (lo cual se conoce como quantum o intervalo de tiempo) en la que debe realizar su tarea. Cuando expira su 
quantum, el subproceso regresa al estado listo y el sistema operativo asigna otro subproceso al procesador.

•  El proceso que utiliza un sistema operativo para determinar qué subproceso debe despachar se conoce como progra-

mación de subprocesos, y depende de las prioridades de los subprocesos.

Sección 23.3 Prioridades y programación de subprocesos

•  Todo subproceso en Java tiene una prioridad de subproceso (de 

MIN_PRIORITY

 a 

MAX_PRIORITY

), la cual ayuda al 

sistema operativo a determinar el orden en el que se programan los subprocesos. 

•  De manera predeterminada, cada subproceso recibe la prioridad 

NORM_PRIORITY

 (una constante de 5). Cada nuevo 

subproceso hereda la prioridad del subproceso que lo creó.

•  La mayoría de los sistemas operativos permiten que los subprocesos con igual prioridad compartan un procesador 

con intervalo de tiempo.

•  El trabajo del programador de subprocesos de un sistema operativo es determinar cuál subproceso se debe ejecutar 

a continuación.

•  Cuando un subproceso de mayor prioridad entra al estado 

listo, el sistema operativo generalmente sustituye el 

subproceso actual en 

ejecución para dar preferencia al subproceso de mayor prioridad (una operación conocida como 

programación preferente).

23_MAQ_CAP_23_DEITEL.indd984

4/19/081:34:02AM