Sistemas Operativos
Sincronización en Java
Sincronización de Procesos - 1
Objetos Thread
Cada hilo se asocia a una instancia de la clase Thread
Hay dos estrategias básicas para usar objetos Thread
Controlardirectamente la creación y gestión de los hilos,
instanciando Thread cada vez que la aplicación requiera un
hilo
Abstraerse del manejo de los hilos y pasar las tareas a un
ejecutor
Por ahora, enfoquemosno en los objetos
Thread
Sincronización de Procesos - Sistemas Operativos 2
Definición de Hilos en Java
¿Cómo definimos e iniciamos un hilo? Básicamente
hay dos formas:
Con un objeto Runnable
Se debe definir un objeto de tipo Runnable.
La interfaz de Runnable define un método único llamado run, que
contiene el código a ejecutar.
El objeto Runnable se pasa al constructor Thread constructor
Sincronización de Procesos - Sistemas Operativos 3
Implementación de Runnable
Ejemplo:
public class HelloRunnable implements Runnable {
public void run() {
[Link]("Hello from a thread!");
}
public static void main(String args[]) {
(new Thread(new HelloRunnable())).start();
}
}
Sincronización de Procesos - Sistemas Operativos 4
Hilos con subclase Thread
La segunda forma es utilizando la Subclase Thread.
La propia clase implementa Runnable
El método run no hace nada
La idea es que se provee una implementación de
“run” propia, definida sobre una subclass de Thread
Sincronización de Procesos - Sistemas Operativos 5
Método run en una subclase de Thread
Ejemplo:
public class HelloThread extends Thread {
public void run() {
[Link]("Hello from a thread!");
}
public static void main(String args[]) {
(new HelloThread()).start();
}
Sincronización de Procesos - Sistemas Operativos 6
}
¿Cuál de las dos utilizar?
La versión usando el objeto Runnable es más general
El objeto que definen no tiene porque se subclase de
la clase Thread, sino de cualquier otra.
La segunda versión es más simple, solo tienen que
ser decendientes de la clase Thread.
Hay otra ventaja sobre el uso de Runnable, que es el
acceso a APIs de manejo de threads de mayor nivel
Sin embargo, la clase Thread implementa varios
métodos, para obtener información, cambiar estado,
etc.
Sincronización de Procesos - Sistemas Operativos 7
Otros métodos de utilidad
[Link]
Suspende la ejecución del hilo por el tiempo especificado
(normalmente milisegundos).
Este método solo funcionaría en el caso que los hilos
sicnronicen por el paso del tiempo
throws InterruptedException, se utiliza para
interrumpir hilos que están esperando. Otro hilo
causará la interrupción y el control volverá donde se
hizo el “throws”
Sincronización de Procesos - Sistemas Operativos 8
Otros métodos de utilidad
Interrupciones (interrupt)
Esuna indicación a un hilo que debe parar lo que hace y
hacer lo que se indique
La interrupción se maneja invocando el método
throw InterruptedException, retornando al main
Sincronización de Procesos - Sistemas Operativos 9
Otros métodos de utilidad
Uso
try {
[Link](4000);
} catch (InterruptedException e) {
// We've been interrupted: no more messages.
return;
}
// Print a message
[Link](importantInfo[i]);
}
Y para llamarlo
if ([Link]()) {
throw new InterruptedException();
}
[Link] es el método para chequear que hubo una interrpción
Sincronización de Procesos - Sistemas Operativos 10
Otros métodos de utilidad
Join (reunir)
Se utiliza para esperar por el fin de otras hebras
[Link]();
El hilo se pone en pausa hasta la finalización del hilo t.
Como el sleep, join responde a una interrupción saliendo
con InterruptedException prendido
Sincronización de Procesos - Sistemas Operativos 11
¿Dudas?
Sincronización de Procesos - Sistemas Operativos 12