Você está na página 1de 23

Programacin Concurrente y Distribuida

Prcticas

Tema 1: Concurrencia con Java


1

ndice:
Tema 1: Concurrencia con Java

1. Hilos 2. Control de hilos 3. Planificacin 4. Coordinacin de hilos 5. Hilos demonios


2

ndice:
Tema 1: Concurrencia con Java

1. Hilos 2. Control de hilos 3. Planificacin 4. Coordinacin de hilos 5. Hilos demonios


3

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

Por herencia Por delegacin

Creacin de hilos por herencia Pasos a seguir:


class miHilo extends Thread { public void run() { }
}

miHilo hilo= new miHilo(...); hilo.setPriority(); hilo.setDaemon(); hilo.run(); hilo.start(); hilo.suspend();


5

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

Creacin de hilos por delegacin Pasos a seguir:


class miHilo implements Runnable { public void run() { } } miHilo hilo= new miHilo(...);

Thread t= new Thread(hilo);


t.setPriority(); t.setDaemon(); t.start();

Que clase sea de objetos activos no condiciona diseo Inconveniente:


El hilo no puede controlarse a s mismo
7

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

1. Hilos 2. Control de hilos 3. Planificacin 4. Coordinacin de hilos 5. Hilos demonios


9

2. Control de hilos
Tema 1: Concurrencia con Java

Clase Thread: proporciona mtodos de control Algunos de los ms importantes:


Mtodo
void start() static Thread currentThread() string getName() void setName() void sleep (long milis[, int nanos]) void suspend(); void resume(); void stop();

Descripcin
Inicia la ejecucin de un hilo Proporciona referencia a hilo actual

Devuelve nombre de un hilo


Establece el nombre de un hilo Suspende hilo por un tiempo determinado Suspende hilo hasta que se reanude por resume() Reanuda un hilo suspendido Aborta un hilo
10

2. Control de hilos
Tema 1: Concurrencia con Java

Mtodo void interrupt()

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

1. Hilos 2. Control de hilos 3. Planificacin 4. Coordinacin de hilos 5. Hilos demonios


12

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

No se garantiza que haya apropiacin entre hilos de la misma prioridad


Mtodos relacionados con la planificacin void setPriority() int getPriority() void yield() Descripcin Establece prioridad de un hilo Obtiene la prioridad de un hilo Cede la CPU al planificador para dar la oportunidad de activarse a otros hilos
13

ndice:
Tema 1: Concurrencia con Java

1. Hilos 2. Control de hilos 3. Planificacin 4. Coordinacin de hilos 5. Hilos demonios


14

4. Coordinacin de hilos
Objetos Java: similares a monitores (Hoare)
Tema 1: Concurrencia con Java
monitor mimonitor

{
private:

Datos y mtodos locales, variables de condicin


public: void metodo1 () {

Mtodos pblicos
} void metodo2 () { }

15

4. Coordinacin de hilos
monitor mimonitor

Tema 1: Concurrencia con Java

{ private: condition C;

public: void metodo1 () { if (tengo_que_esperar()) wait(C); } void metodo2 () { signal(C); } }


16

4. Coordinacin de hilos
Objetos java: modelo simplificado
Tema 1: Concurrencia con Java

Garantizan la exclusin mutua entre mtodos synchronized No hay variables de condicin

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

Problema: dificultad para implementar esperas guardadas


17

4. Coordinacin de hilos
Tema 1: Concurrencia con Java class miclase {

synchronized public void metodo1() { while(tengo_que_esperar()) wait(); throws InterruptedException }


synchronized public void metodo2() try { { wait(); cambiar_condicion(); } catch(InterruptedException e) {}; notifyAll(); } }
18

4. Coordinacin de hilos
Inconvenientes de modelo Java
Tema 1: Concurrencia con Java

NotifyAll(): Ineficiente, para reanudar un hilo de entre N:


Reanudar N hilos Efectuar N evaluaciones Suspender N-1 hilos

Notify(): soluciones complejas y difciles de reusar y mantener synchronized debe ser explcito: dificulta la reutilizacin

Atributos volatile: pueden ser actualizados de manera concurrente


Buena prctica: atributos privados y modificados con exclusin mutua
synchronize (expr) { }

Sentencia synchronize (no recomendada):

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

1. Hilos 2. Control de hilos 3. Planificacin 4. Coordinacin de hilos 5. Hilos demonios


21

5. Hilos demonios
Dos tipos de hilos en Java:
Tema 1: Concurrencia con Java

Hilos de usuario (por defecto) Hilos demonio

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

Establece o elimina el carcter de demonio al hilo


Obtiene el carcter de demonio del hilo
22

23

Você também pode gostar