Está en la página 1de 12

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() {
System.out.println("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() {


System.out.println("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

 Thread.sleep
 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 {
Thread.sleep(4000);
} catch (InterruptedException e) {
// We've been interrupted: no more messages.
return;
}
// Print a message
System.out.println(importantInfo[i]);
}
 Y para llamarlo
if (Thread.interrupted()) {
throw new InterruptedException();
}
 Thread.interrupted 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
t.join();
 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

También podría gustarte