Con el fin de conseguir una conecta ejecución de un programa se establecen prioridades en los
threads. de fonna que se produzca un reparto más eficiente de los recursos disponibles. Así. en mi
determinado momento, interesará que un determinado proceso acabe lo antes posible sus cálculos,
de fonna que habrá que otorgarle más recursos (más tiempo de CPU). Esto no significa que el resto
de procesos no requieran tiempo de CPU. sino que necesitarán menos. La forma de llevar a cabo
esto es gracias a las prioridades.
Cuando se crea un nuevo thread. éste hereda la prioridad del thread desde el que ha sido
inicializado. Las prioridades viene definidas por variables miembro de la clase Thread. que toman
valores enteros que oscilan entre la máxima prioridad MAXPRIORITY (normahílente tiene el
valor 10) y la mínima prioridad MIN_PRIORITY (valor 1). siendo la prioridad por defecto
NORM_PRIORITY (valor 5). Para modificar la prioridad de un thread se utiliza el método
setPriority(). Se obtiene su valor con getPriority().
El algoritmo de distribución de recursos en Java escoge por norma general aquel thread que
tiene una prioridad mayor, aunque no siempre ocurra así. para evitar que algunos procesos queden
"dormidos".
Cuando hay dos o más threads de la misma prioridad (y además, dicha prioridad es la
más elevada), el sistema no establecerá prioridades entre los mismos, y los ejecutará
alternativamente dependiendo del sistema operativo en el que esté siendo ejecutado. Si dicho SO
soporta el "time-slicing" (reparto del tiempo de CPU), como por ejemplo lo hace Windows
95/98/NT, los threads serán ejecutados alternativamente.
Un thread puede en un detenninado momento renunciar a su tiempo de CPU y otorgárselo a
otro thread de la misma prioridad, mediante el método yield(). aunque en ningún caso a un thread
de prioridad inferior.
No hay comentarios:
Publicar un comentario