
A veces necesitamos que nuestro programa Java realice varias cosas simultáneamente. Otras veces tiene que realizar una tarea muy pesada, por ejemplo, consultar en el listín telefónico todos los nombres de chica que tengan la letra n, que tarda mucho y no deseamos que todo se quede parado mientras se realiza dicha tarea. Para conseguir que Java haga varias cosas a la vez o que el programa no se quede parado mientras realiza una tarea compleja, tenemos los hilos (Threads).
Prioridades de hilo
El intérprete de Java utiliza prioridades para determinar cómo debe comportarse cada hilo con respecto a los demás. Las prioridades de hilo son valores entre 1 y 10 que indican la prioridad relativa de un hilo con respecto a los demás.
Thread
Encapsula todo el control necesario sobre los hilos, En el objeto Thread hay métodos que controlan si el hilo se está ejecutando, está durmiendo, en suspenso o detenido. La clase Thread es la única manera de controlar el comportamiento de los hilos. En la siguiente instrucción se muestra como acceder al hilo en ejecución actual:
Thread t = Thread.currentThread(); * el hilo actual se almacena en la variable t *
Runnable
Runnable es una interfaz simple que abstrae la noción de que se desea que algún código se "ejecute" asíncronamente. Para implementar Runnable, a una clase le basta con implementar un solo método llamado run.
Resumen de la interfaz de programación (API) de hilos
Se incluye a continuación una referencia rápida a todos los métodos de la clase Thread que se han comentado en este capítulo.
Métodos de clase
Estos son los métodos estáticos que deben llamarse de manera directa en la clase Thread.
- currentThread: el método estático devuelve el objeto Thread que representa al hilo que se ejecuta actualmente.
- yield: este método hace que el intérprete cambie de contexto entre el hilo actual y el siguiente hilo ejecutable disponible. Es una manera de asegurar que los hilos de menor prioridad no sufran inanición.
- Sleep(int n): el método sleep provoca que el intérprete ponga al hilo en curso a dormir durante n milisegundos. Una vez transcurridos los n milisegundos, dicho hilo volverá a estar disponible para su ejecución. Los relojes asociados a la mayor parte de los intérpretes Java nos serán capaces de obtener precisiones mayores de 10 milisegundos.
Métodos de instancia
- start: indica al intérprete de Java que cree un contexto de hilo del sistema y comience a ejecutarlo. A continuación, el método run objeto de este hilo será llamado en el nuevo contexto del hilo. Debe tomarse la precaución de no llamar al método start más de una vez sobre un objeto hilo dado.
- run: constituye el cuerpo de un hilo en ejecución. Este es el único método de la interfaz Runnable. Es llamado por el método start después de que el hilo apropiado del sistema se haya inicializado. Siempre que el método run devuelva el control, el hilo actual se detendrá.
- stop: provoca que el hilo se detenga de manera inmediata. A menudo constituye una manera brusca de detener un hilo, especialmente si este método se ejecuta sobre el hilo en curso. En tal caso, la línea inmediatamente posterior a la llamada al método stop no llega a ejecutarse jamás, pues el contexto del hilo muere antes de que stop devuelva el control.
- suspend: es distinto de stop. suspend toma el hilo y provoca que se detenga su ejecución sin destruir el hilo de sistema subyacente, ni el estado del hilo anteriormente en ejecución. Si la ejecución de un hilo se suspende, puede llamarse a resume sobre el mismo hilo para lograr que vuelva a ejecutarse de nuevo.
- resume: se utiliza para revivir un hilo suspendido.
- setPriority(int p): asigna al hilo la prioridad indicada por el valor entero pasado como parámetro.
- getPriority: devuelve la prioridad del hilo en curso, que es un valor entre 1 y 10.
- setName(String nombre): identifica al hilo con un nombre mnemónico. De esta manera se facilita la depuración de programas multihilo.
- getName: devuelve el valor actual, de tipo cadena, asignado como nombre al hilo mediante setName.
