Skip to content

4 Prioridad de los hilos

Prioridad en los hilos

Como hemos visto anteriormente cuando hablamos de la clase Thread, uno de los datos gestionados internamente por un hilo es su prioridad. Mediante el método setPriority(priority) podemos establecer la prioridad de un determinado hilo.

La clase Thread nos proporciona una serie de constantes con los valores de prioridad mínima, normal y máxima, denominadas respectivamente Thread.MIN_PRIORITY, Thread.NORM_PRIORITY y Thread.MAX_PRIORITY.

Sin embargo, no es recomendable cambiar la prioridad de los hilos porque los problemas de inanición que puede producir.

Warning

Debemos tener en cuenta que al establecer la prioridad de un hilo tan sólo estaremos haciendo una sugerencia al sistema operativo, sin ninguna garantía de que dicha sugerencia sea tenida en cuenta.

Proyecto Priority

Similar al proyecto anterior, pero a cada hilo se le asigna una prioridad. Estableceremos la prioridad máxima para los hilos pares y la prioridad mínima para los impares y comprobaremos el orden en el que se ejecutan los hilos.

public class Main {

    public static void main(String[] args) {
        for (int i = 1; i <= 10; i++) {
            Thread thread = new Thread(new MultiplicationTable(i));
            if ((i % 2) == 0) {
                thread.setPriority(Thread.MAX_PRIORITY);
            } else {
                thread.setPriority(Thread.MIN_PRIORITY);
            }
            thread.start();
        }
    }

}
class MultiplicationTable implements Runnable {

    private final int number;

    MultiplicationTable(int number) {
        this.number = number;
    }

    @Override
    public void run() {
        for (int i = 1; i <= 10; i++) {
            System.out.printf("%s: %d * %d = %d\n", Thread.currentThread()
                    .getName(), number, i, i * number);
        }
    }

}

Al ejecutar el proyecto podemos comprobar como el orden en que se muestran las líneas de las diferentes tablas de multiplicar no es igual al de un programa con un único hilo, e incluso puede ser diferentes en distintas ejecuciones. Además vemos como establecer la prioridad no es ninguna garantía de ejecución temprana.