23
1 Tema 1: Concurrencia con Java Programación Programación Concurrente y Concurrente y Distribuida Distribuida Prácticas Prácticas

Concurrencia Con Java

Embed Size (px)

Citation preview

1

Tema 1: Concurrencia con Java

Programación Programación Concurrente y DistribuidaConcurrente y Distribuida

PrácticasPrácticas

22

Tem

a 1:

Co

ncu

rren

cia

con

Jav

a

Índice:

1. Hilos

2. Control de hilos

3. Planificación

4. Coordinación de hilos

5. Hilos demonios

33

Tem

a 1:

Co

ncu

rren

cia

con

Jav

a

Índice:

1. Hilos

2. Control de hilos

3. Planificación

4. Coordinación de hilos

5. Hilos demonios

4

1. Hilos Hilo: secuencia de ejecución dentro de un proceso Todo programa Java tiene al menos un hilo:

Tem

a 1:

Co

ncu

rren

cia

con

Jav

a

class principal{ … public static void main (String args[]) { . . . }}

Dicho hilo principal puede crear nuevos hilos Java soporta mecanismos de sincronización entre

hilos

5

1. Hilos Formas de crear hilos en Java:

Por herenciaPor delegación

Tem

a 1:

Co

ncu

rren

cia

con

Jav

a

class miHilo extends Thread{

}

Creación de hilos por herencia Pasos a seguir:

…public void run(){ …}

… miHilo hilo= new miHilo(...);

hilo.start();…

hilo.setPriority(…);hilo.setDaemon(…);…hilo.run();…hilo.suspend();…

6

1. Hilos

Tem

a 1:

Co

ncu

rren

cia

con

Jav

a

Creación de hilos por herencia (cont.) Objetos de clase miHilo son objetos Thread

Heredan la funcionalidad de Thread: pueden usar los métodos dicha clase para controlarse a sí mismos

Inconveniente:En Java: herencia simple…¿Y si necesitamos heredar funcionalidad de otra clase?

7

1. Hilos

Tem

a 1:

Co

ncu

rren

cia

con

Jav

a

class miHilo implements Runnable{

}

Creación de hilos por delegación Pasos a seguir:

…public void run(){ …}

… miHilo hilo= new miHilo(...);

t.start();…

t.setPriority(…);t.setDaemon(…);…

Thread t= new Thread(hilo);

Que clase sea de objetos activos no condiciona diseño Inconveniente:

El hilo no puede controlarse a sí mismo

8

1. Hilos

Tem

a 1:

Co

ncu

rren

cia

con

Jav

a

class miHilo implements Runnable{

public void run() {

… }}

Solución: siguiente patrón de delegación

private Thread hilo;…public miHilo(…){ hilo= new Thread(this); …

}hilo.start();

hilo.suspend();

99

Tem

a 1:

Co

ncu

rren

cia

con

Jav

a

Índice:

1. Hilos

2. Control de hilos

3. Planificación

4. Coordinación de hilos

5. Hilos demonios

10

2. Control de hilos Clase Thread: proporciona métodos de control Algunos de los más importantes:

Tem

a 1:

Co

ncu

rren

cia

con

Jav

a

Método Descripción

void start() Inicia la ejecución de un hilo

static Thread currentThread()

Proporciona referencia a hilo actual

string getName() Devuelve nombre de un hilo

void setName() Establece el nombre de un hilo

void sleep (long milis[, int nanos])

Suspende hilo por un tiempo determinado

void suspend(); Suspende hilo hasta que se reanude por resume()

void resume(); Reanuda un hilo suspendido

void stop(); Aborta un hilo

11

2. Control de hilos

Tem

a 1:

Co

ncu

rren

cia

con

Jav

a Método Descripción

void interrupt() Interrumpe un hilo

boolean interrupted()Comprueba si hilo ha sido interrumpido, y limpia la bandera de interrumpido

boolean isInterrupted() Comprueba si hilo ha sido interrumpido

void join()Hace esperar al hilo llamante hasta que termine el hilo sobre el que se llama.

boolean isAlive()Comprueba si se ha llamado a start() pero aún no ha terminado el hilo.

1212

Tem

a 1:

Co

ncu

rren

cia

con

Jav

a

Índice:

1. Hilos

2. Control de hilos

3. Planificación

4. Coordinación de hilos

5. Hilos demonios

13

3. Planificación Planificación basada en prioridades estáticas Cada hilo tiene una prioridad entre

Thread.MIN_PRIORITYThread.MAX_PRIORITYPor defecto: Thread.NORM_PRIORITY

No se garantiza que haya apropiación entre hilos de la misma prioridad

Tem

a 1:

Co

ncu

rren

cia

con

Jav

a

Métodos relacionados con la planificación

Descripción

void setPriority() Establece prioridad de un hilo

int getPriority() Obtiene la prioridad de un hilo

void yield()Cede la CPU al planificador para dar la oportunidad de activarse a otros hilos

1414

Tem

a 1:

Co

ncu

rren

cia

con

Jav

a

Índice:

1. Hilos

2. Control de hilos

3. Planificación

4. Coordinación de hilos

5. Hilos demonios

15

4. Coordinación de hilos Objetos Java: similares a monitores (Hoare)

Tem

a 1:

Co

ncu

rren

cia

con

Jav

a

monitor mimonitor

{ private:

public:

}

void metodo1 (){

}void metodo2 (){ …}

Datos y métodos locales, variables de condición

Métodos públicos

16

4. Coordinación de hilos

Tem

a 1:

Co

ncu

rren

cia

con

Jav

a

monitor mimonitor

{ private:

public:

}

void metodo1 (){

}void metodo2 (){

}

condition C;

if (tengo_que_esperar()) wait(C);

signal(C);

17

4. Coordinación de hilos

Tem

a 1:

Co

ncu

rren

cia

con

Jav

a

Objetos java: modelo simplificadoGarantizan la exclusión mutua entre métodos synchronizedNo hay variables de condición

wait(C) wait()Método heredado de ObjectSólo en métodos declarados synchronizedPuede lanzar la excepción InterruptedException

signal(C) notify()Método heredado de ObjectSólo en métodos declarados synchronizedReanuda cualquier hilo detenido en cualquier wait() del

objetoPolítica de reanudación: preferencia al hilo reanudante Problema: dificultad para implementar esperas guardadas

18

class miclase

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

synchronized public void metodo2(…) { … cambiar_condicion(); notifyAll(); … }}

4. Coordinación de hilos

Tem

a 1:

Co

ncu

rren

cia

con

Jav

a

try{ wait();} catch(InterruptedException e) {};

…throws InterruptedException

19

4. Coordinación de hilos

Tem

a 1:

Co

ncu

rren

cia

con

Jav

a

Inconvenientes de modelo JavaNotifyAll(): Ineficiente, para reanudar un hilo de entre N:

• Reanudar N hilos

• Efectuar N evaluaciones

• Suspender N-1 hilos

Notify(): soluciones complejas y difíciles de reusar y mantener

synchronized debe ser explícito: dificulta la reutilización Atributos volatile: pueden ser actualizados de manera concurrente

Buena práctica: atributos privados y modificados con exclusión mutua

Sentencia synchronize (no recomendada):

synchronize (expr){ …}…

20

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; }}

4. Coordinación de hilos

Tem

a 1:

Co

ncu

rren

cia

con

Jav

a

2121

Tem

a 1:

Co

ncu

rren

cia

con

Jav

a

Índice:

1. Hilos

2. Control de hilos

3. Planificación

4. Coordinación de hilos

5. Hilos demonios

22

5. Hilos demonios

Tem

a 1:

Co

ncu

rren

cia

con

Jav

a

Dos tipos de hilos en Java:Hilos de usuario (por defecto)Hilos demonio

La aplicación Java termina cuando terminan todos los hilos de usuario

Utilidad hilos demonio: actividades en segundo plano El carácter de demonio de un hilo se le ha de asignar

antes de iniciarlo (configuración)

Métodos Descripción

void setDaemon (boolean d)

Establece o elimina el carácter de demonio al hilo

Boolean isDaemon () Obtiene el carácter de demonio del hilo

23