Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Prcticas
ndice:
Tema 1: Concurrencia con Java
ndice:
Tema 1: Concurrencia con Java
1. Hilos
Tema 1: Concurrencia con Java
Hilo: secuencia de ejecucin dentro de un proceso Todo programa Java tiene al menos un hilo:
class principal { public static void main (String args[]) { . . . } }
Dicho hilo principal puede crear nuevos hilos Java soporta mecanismos de sincronizacin entre hilos
4
1. Hilos
Formas de crear hilos en Java:
Tema 1: Concurrencia con Java
1. Hilos
Tema 1: Concurrencia con Java
Creacin de hilos por herencia (cont.) Objetos de clase miHilo son objetos Thread
Heredan la funcionalidad de Thread: pueden usar los mtodos dicha clase para controlarse a s mismos
Inconveniente:
En Java: herencia simple Y si necesitamos heredar funcionalidad de otra clase?
1. Hilos
Tema 1: Concurrencia con Java
1. Hilos
Solucin: siguiente patrn de delegacin
Tema 1: Concurrencia con Java
class miHilo implements Runnable { private Thread hilo; public miHilo() { hilo= new Thread(this); hilo.start(); } public void run() {
hilo.suspend(); }
ndice:
Tema 1: Concurrencia con Java
2. Control de hilos
Tema 1: Concurrencia con Java
Descripcin
Inicia la ejecucin de un hilo Proporciona referencia a hilo actual
2. Control de hilos
Tema 1: Concurrencia con Java
Descripcin Interrumpe un hilo Comprueba si hilo ha sido interrumpido, y limpia la bandera de interrumpido
boolean interrupted()
boolean isInterrupted() Comprueba si hilo ha sido interrumpido void join() boolean isAlive()
Hace esperar al hilo llamante hasta que termine el hilo sobre el que se llama.
Comprueba si se ha llamado a start() pero an no ha terminado el hilo.
11
ndice:
Tema 1: Concurrencia con Java
3. Planificacin
Tema 1: Concurrencia con Java
Planificacin basada en prioridades estticas Cada hilo tiene una prioridad entre
Thread.MIN_PRIORITY Thread.MAX_PRIORITY Por defecto: Thread.NORM_PRIORITY
ndice:
Tema 1: Concurrencia con Java
4. Coordinacin de hilos
Objetos Java: similares a monitores (Hoare)
Tema 1: Concurrencia con Java
monitor mimonitor
{
private:
Mtodos pblicos
} void metodo2 () { }
15
4. Coordinacin de hilos
monitor mimonitor
{ private: condition C;
4. Coordinacin de hilos
Objetos java: modelo simplificado
Tema 1: Concurrencia con Java
wait(C) wait()
Mtodo heredado de Object Slo en mtodos declarados synchronized Puede lanzar la excepcin InterruptedException
signal(C) notify()
Mtodo heredado de Object Slo en mtodos declarados synchronized Reanuda cualquier hilo detenido en cualquier wait() del objeto Poltica de reanudacin: preferencia al hilo reanudante
4. Coordinacin de hilos
Tema 1: Concurrencia con Java class miclase {
4. Coordinacin de hilos
Inconvenientes de modelo Java
Tema 1: Concurrencia con Java
Notify(): soluciones complejas y difciles de reusar y mantener synchronized debe ser explcito: dificulta la reutilizacin
19
4. Coordinacin de hilos
class pila { private Vector elementos= new Vector() synchronized public void apilar(Object elemento) { elementos.add(elemento); notifyAll(); } synchronized public Object desapilar() { while(elementos.isEmpty ()) try{ wait() } catch (InterruptedException e){e.printStackTrace();} Object resultado= elementos.elementAt(elementos.size()-1); elementos.removeElementAt(elementos.size()-1); return resultado; } } Tema 1: Concurrencia con Java
20
ndice:
Tema 1: Concurrencia con Java
5. Hilos demonios
Dos tipos de hilos en Java:
Tema 1: Concurrencia con Java
La aplicacin Java termina cuando terminan todos los hilos de usuario Utilidad hilos demonio: actividades en segundo plano El carcter de demonio de un hilo se le ha de asignar antes de iniciarlo (configuracin)
Mtodos void setDaemon (boolean d) Boolean isDaemon () Descripcin
23