Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Sistemas en Tiempo
Real en Java
Declaración de Interfaces
Una interfaz es un mecanismo para definir un contrato entre dos partes: el proveedor de un
servicio y las clases que necesitan que sus objetos usen el servicio.
una interfaz es una clase abstracta, un grupo relacionado de métodos con cuerpo vacío.
Para declarar una interfaz se deben proporcionar las cabeceras de los métodos.
Implementación de Interfaces
Para acceder a los métodos de la interfaz, la interfaz tiene que ser implementada por otra
clase usando la palabra clave interface.
Ejemplo de Uso de una Interfaz
Procesos vs Hilos
Un Sistema Operativo asigna recursos necesarios
(memoria, tiempo procesamiento, entrada/salida)
a los procesos y asegura que no se interfieran entre
si. La mayoria de los SO distingue entre:
Procesos pesados: completamente separados entre
si.
Proceso livianos (Hilos): comparten un espacio de
memoria y posiblemente otros recursos.
Un hilo es un segmento de código capaz de ejecutarse con otros procesos. Los hilos no se
ejecutan al mismo tiempo sino que emplean tiempo compartido. Es necesario que un hilo de a
otros hilos la posibilidad de ejecutarse.
Procesos vs Hilos
Computación Concurrente
Un lenguaje de programación concurrente debe permitir:
Crear de hilos
Compartir datos entre hilos
Sincronizar el orden de ejecución de los hilos
Sincronizar la competencia: cuando varios hilos comparten un mismo recurso.
Sincronizar la cooperación: cuando un hilo espera la finalización de ejecución de otro
proceso antes de iniciar su ejecución.
Implementación de hilos en Java
Heredando de la clase java.lang.Thread
◦ Java.lang.Thread implementa la clase Runnable
◦ La clase que hereda de Thread hereda todos los métodos y puede sobre escribirlos
◦ Esta opción puede ser seleccionada cuando la clase que necesita ser concurrente no
hereda de otras clases.
Implementando la interfaz Runnable.
◦ Para implementar la interfaz Runnable es necesario implementar el método run()
◦ Esta opción se selecciona cuando la clase que se requiere que sea concurrente hereda de
otras clases.
Implementación de hilos en Java
Método 1: hilo como subclase de Thread Método 2: hilo que implementa Runnable
Class A extends Thread { class B implements Runnable {
Para pausar la ejecución del hilo puede utilizar Thread.sleep (cant. milisegundos)
Ciclo de vida de los hilos
Control de hilos a nivel grupo
java.lang.ThreadGroup
Permite ejecutar hilos simultáneamente y controlarlos como una única entidad.
La clase The class ThreadGroup tiene dos constructores:
– ThreadGroup (String name);
– ThreadGroup (ThreadGroup parent, String name).
Prioridad entre hilos
El método setPriority permite establecer el nivel de prioridad de un hilo.
El valor de prioridad debe encontrarse entre un valor mínimo (MIN_PRIORITY) y un valor
máximo (MAX_PRIORITY).
◦ MIN_PRIORITY = 1
◦ NORM_PRIORITY = 5
◦ MAX_PRIORITY = 10
getPriority permite conocer la prioridad de un hilo.
Programación de tareas
Se debe heredar de la clase java.util.TimerTask que implementa la interfaz Runnable.
◦ Implementar el método run() a fin de definir la tarea a ser realizada.
Emplear un java.util.Timer que permita la ejecución de la tarea.
◦ schedule(task, long milliseconds): programa la tarea al especificar un delay inicial.
◦ Schedule(task, long milliseconds, long period): programa la tarea después de un delay
inicial para ejecutarse de manera periódica.
◦ El método cancel() detiene la programación del Timer.
Ejercicio 4
Implemente un hilo denomido Clock usando la clase Thread. El método run debe
mostrar el mensaje "tic“.
El hilo Clock debe planificarse para ejecutarse con una demora inicial de 4000
milisegundos.
Recurso Compartido
Ejemplo método en exclusión mutua
Acceso concurrente a variables
compartidas
La variable debe ser implementada como objeto
La palabra clave synchronized define un bloque que se ejecuta exclusivamente.
Acceso concurrente a métodos y
variables
Un monitor supervisa que solo un thread ejecute el bloque de instrucciones.
synchronized void Metodo(){ ....}: monitor asociado con el método.
synchronized (objecto) { instrucciones }: monitor asociado con el objeto. Cada objecto tiene
una cola de espera.