Concurrencia Con Java
-
Upload
freddy-mauricio-campos-orellana -
Category
Documents
-
view
49 -
download
2
Transcript of Concurrencia Con Java
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