Java dispone de un mecanismo de prioridades para los
threads, de modo de poder asignar más tiempo de CPU a un thread que a otro. Típicamente se asigna una prioridad de 1 a 10 (10 es la mayor prioridad) mediante
setPriority, como en el ejemplo que sigue:
public class Ejemplo21 {
static Animal tortuga;
static Animal liebre;
static Animal guepardo;
public static void main(String argv[])
throws InterruptedException {
tortuga = new Animal(2, "T");
liebre = new Animal(3, "L");
guepardo = new Animal(4, "G");
tortuga.start();
liebre.start();
guepardo.start();
tortuga.join();
liebre.join();
guepardo.join();
}
}
class Animal extends Thread {
String nombre;
public Animal(int prioridad, String nombre) {
}
public void run() {
for (int x = 0; x < 30; x++) {
System.out.print( nombre );
System.out.println("\nLlega "+nombre );
}
}
La salida de este programa, ejecutado con
java Ejemplo21, es por ejemplo:
C:\java\curso>java Ejemplo21
GGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
Llega G
L
TLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
Llega L
TTTTTTTTTTTTTTTTTTTTTTTTTTTTT
Llega T
Como se ve, a pesar de haber arrancado antes la tortuga, casi todo el tiempo de CPU lo usa primero el Guepardo, luego la Liebre (aunque algo queda para la pobre tortuga, como se ve en la T marcada), y finalmente para la Tortuga. No todas las corridas ni todos los sistemas dan igual salida, ya que ésta depende de la carga del procesador y de la implementación de Java particular.
Este programa simplemente crea tres animales (clase Animal), asigna un thread a cada uno y los ejecuta. Este ejemplo está hecho en base a uno del libro "Programación Java" de Macary y Nicolas.