SlideShare una empresa de Scribd logo
1 de 41
Programación Concurrente con Java
2
Concurrencia
 En el mundo real, muchas cosas pasan a la vez
 Con varias computadoras se pueden ejecutar varios programas
a la vez
 Con una sola computadora se puede simular la ejecución
paralela de varias actividades:
 múltiples flujos de ejecución (multithreading)
comparten el uso de un procesador
 Java soporta la ejecución paralela de varios threads (hilos
de ejecución)
 Los threads en una misma máquina virtual comparten recursos
• por ejemplo, memoria
 Los threads en varias máquinas virtuales necesitan de
mecanismos de comunicación para compartir información
© Juan Pavón Mestras, UCM 2001 Programación concurrentecon Java 3
Concurrencia
 Para qué:
 Mejorar la disponibilidad y eficiencia
 Modelar tareas, objetos autónomos, animación
 Paralelismo: múltiples procesadores, simultanear E/S
 Protección: aislar actividades en hilos de ejecución
 Ejemplos:
• Tareas con mucha E/S: acceso a sitios web, bases de datos
• Interfaces gráficas de usuario: gestión de eventos
• Demonios con múltiples peticiones de servicio simultáneas
• Simulación
 Con cuidado:
 Complejidad: seguridad, viveza, composición
 Sobrecarga: Mayor uso de recursos
4
Programación concurrente OO
 La concurrencia es natural en orientación a
objetos
 Ya Simula67 soportaba concurrencia
 Diferencias con otros modelos de concurrencia
 Programación OO secuencial
• Tiene más importancia la seguridad y la viveza
• Pero también usa y extiende patrones de diseño comunes
 Programación orientada a eventos
• Permite que pueda haber múltiples eventos a la vez
• Pero usa y extiende estrategias de mensajería
 Programación multithread de sistemas
• Añade encapsulación y modularidad
• Pero usa y extiende implementaciones eficientes
5
Programación concurrente OO
 Concurrencia y reusabilidad
 Mayor complejidad
• Criterios de corrección más duros que con código
secuencial
• El no determinismo impide la depuración y el
entendimiento del código
 Mayor dependencia del contexto
• Los componentes son seguros y vivos sólo en
determinados contextos: necesidad de documentación
• Puede ser difícil extender mediante herencia (anomalías)
• Puede ser difícil la composición: conflictos entre técnicas
de control de la concurrencia
6
Programación concurrente OO
 Políticas de diseño
 Ejemplos
• Dependencia de estado: qué hacer cuando se recibeuna
petición que no se puede realizar
• Disponibilidad de servicio: Restricciones en el acceso
concurrente a los métodos
• Restricciones de flujos: Establecer direccionabilidad y
reglas de capas para los mensajes
 Combaten la complejidad
• Reglas de diseño de alto nivel y restricciones
arquitecturales evitan decisiones caso por caso
inconsistentes
 Mantener la apertura
• Acomodar componentes que obedecen políticas
determinadas
7
Modelos de objetos
 4 operaciones básicas
 Aceptar un mensaje
 Actualizar el estado local
 Enviar un mensaje
 Crear un nuevo objeto
 Dependiendo de las reglas para estas
operaciones, hay 2 categorías de modelos:
 Objetos activos
 Objetos pasivos
8
Modelo de objetos pasivos
main E/S
•En programas secuenciales, sólo un objeto Programa es activo
•Los objetos pasivos encapsulan datos del programa
pasivo
Objeto Objeto
ObjetopasivoObjeto
pasivo ObjetpoasivoObjeto
pasivo pasivo
programa
9
Modelo de objetos activos
mensaje
•Cada objeto tiene su propio hilo de ejecución (sólo puede
hacer una cosa a la vez)
accion {
actualiza estado
envia mensaje
oneway
crea objeto
}
10
Sistemas = Objetos + Actividades
 Objetos
 TADs, componentes agregados, monitores, objetos de
negocio (EJBs), servlets, objetos CORBA remotos
 Se pueden agrupar de acuerdo a estructura, role, ...
 Se pueden usar para múltiples actividades
• Lo más importante es la SEGURIDAD
 Actividades
 Mensajes, cadenas de llamadas, workflows, hilos de
ejecución, sesiones, escenarios, scripts, casos de uso,
transacciones, flujos de datos
 Se pueden agrupar por origen, función, ...
 Comprenden múltiples objetos
• Lo más importante es la VIVEZA
11
Java
 Soporte para ingeniería de software
 Empaquetado: objetos, clases, componentes, paquetes
 Portabilidad: bytecode, unicode, transportes varios
 Extensibilidad: Subclases, interfaces, class loader
 Seguridad: máquina virtual, verificadores de código
 Bibliotecas: paquetes java.*
 Ubicuidad: corre en casi todas partes
 Retos en nuevos aspectos de la programación
 Concurrencia: threads, locks
 Distribución: RMI, CORBA
 Persistencia: Serialización, JDBC
 Seguridad: gestores de seguridad, dominios
12
Concurrencia en Java
 El código que ejecuta un thread se define en
clases que implementan la interfaz Runnable
public interface Runnable {
public void run();
}
13
Concurrencia en Java
 Clase Thread
 Un hilo de ejecución en un programa
 Métodos
• run()
• start()
• join()
• interrupt()
actividad del thread
activa run() y vuelve al llamante
espera por la terminación (timeout opcional)
sale de un wait, sleep o join
• isInterrupted()
• yield()
• stop(), suspend(), resume() (deprecated)
 Métodos estáticos
• sleep(milisegundos)
• currentTread()
 Métodos de la clase Object que controlan la suspensión
de threads
• wait(), wait(milisegundos), notify(), notifyAll()
14
Concurrencia en Java
 Creación de Threads:
class MiThread extends Thread {...}
=> new MiThread()
class MiThread implements Runnable {...}
=> new Thread(new MiThread())
15
Concurrencia en Java
import java.lang.Math;
class EjemploThread extends Thread {
int numero;
EjemploThread (int n) { numero = n; }
public void run() {
try { while (true){
System.out.println (numero);
sleep((long)(1000*Math.random()));
}
} catch (InterruptedException e) { return; } // acaba este thread
}
public static void main (String args[]){
for (int i=0; i<10; i++)
new EjemploThread(i).start();
}
}
import java.lang.Math;
class EjemploThread extends Thread {
int numero;
EjemploThread (int n) { numero = n; }
public void run() {
try { while (true){
System.out.println (numero);
sleep((long)(1000*Math.random()));
}
} catch (InterruptedException e) { return; } // acaba este thread
}
public static void main (String args[]){
for (int i=0; i<10; i++)
new EjemploThread(i).start();
}
}
SALIDA
1
4
5
6
2
9
8
4
3
0
7
3
7
2
8
3
1
9
...
16
Sincronización en Java
 Necesaria para evitar colisiones entre hilos de ejecución
 Por ejemplo, accesos a memoria o a un recurso a la vez
 Sincronización:
 synchronized método (...) {...} // a nivel de objeto
// a nivel de bloque de
 synchronized (objeto) { ... }
código
 Métodos
 wait() y wait(timeout)
El thread se queda bloqueado hasta que algún otro le mande
una señal (notify) y entonces pasa a la cola de listos para
ejecutar
 notify() y notifyAll()
•  No es fácil la correcta programación de la concurrencia y la
sincronización
17
Sincronización en Java
public class NoSincronizada extends Thread{
static int n = 1;
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(n);
n++;
}
}
public static void main(String args[]) {
Thread thr1 = new NoSincronizada();
Thread thr2 = new NoSincronizada();
thr1.start();
thr2.start();
}
}
1
2
3
4
5
6
7
8
8
9
10
11
12
14
15
16
17
18
19
20
Posible
resultado
de
ejecución
?
¿?
19
Monitores en Java
 Un monitor es un objeto que implementa el
acceso en exclusión mutua a sus métodos
 En Java se aplica a los métodos de la clase declarados
como synchronized
• Los demás métodos pueden accederse concurrentemente
independientemente de si algún thread accede a ellos o a
un método synchronized
// ...dentro de código synchronized, ya que el hilo debe ser el propietario del monitor
// del objeto. Liberará el monitor hasta que lo despierten con notify o notifyAll, y
// pueda retomar control del monitor
try {
wait(); // o wait(0);
} catch (InterruptedException e) {
System.out.println(“Interrumpido durante el wait");
}
// ...también dentro de código synchronized
notify(); // o notifyAll();
20
Monitores en Java
 Disciplinas de señalización de monitores
 Signal and exit : Después de hacer notify el thread debe
salir del monitor y el thread que recibe la señal es el
siguiente en entrar en el monitor
 Signal and continue: El thread que recibe la señal no tiene
que ser necesariamente el siguiente en entrar en el
monitor
• Puede haber intromisión: Antes que el thread despertado
podría entrar un thread que estuviera bloqueado en la
llamada a un método synchronized
 En Java:
 Los monitores siguen la disciplina signal and continue
 Tampoco se garantiza que el thread que más tiempo lleve
esperando sea el que reciba la señal con un notify()
 Cuando se usa notifyAll() para pasar todos los threads en
wait a la cola de listos para ejecutar, el primer thread en
entrar en el monitor no será necesariamente el que más
tiempo lleve esperando
22
Propiedades de los programas concurrentes
 En programación secuencial:
Corrección parcial (Si el programa termina, realiza su función
correctamente)
+
Terminación (el programa termina alguna vez)
= Corrección total
 En programación concurrente:
 Propiedades de seguridad (Si el sistema evoluciona, lo hace
correctamente)
 Propiedades de viveza (Si algo debe ocurrir, alguna vez ocurre)
 Equidad (Todo proceso que evoluciona lo hace recibiendo un trato
equitativo de los recursos)
 Para verificar estas propiedades en un programa
Java hay que entender cómo funciona la MVJ
(y también para programar mejor...)
23
Threads y Locks en la MVJ
Conceptos para la definición del funcionamiento
de la MVJ
 Variables son los lugares en los que un programa puede
almacenar algo
 Variables de clases (static) y de objetos, y también
componentes de arrays
 Las variables se guardan en una memoria principal que es
compartida por todos los threads
 Cada thread tiene su propia memoria de trabajo
 El thread trabaja con copia de las variables en la memoria
de trabajo
 La memoria principal tiene una copia maestra de cada
variable
 La memoria principal puede contener también cerrojos
(locks)
 Todo objeto Java tiene asociado un lock
 Los threads pueden competir para adquirir un lock
24
Threads y Locks en la MVJ
Operaciones atómicas en la MVJ
 Ejecutables por threads:
(siempre que ejecute una instrucción de la MVJ que usa el valor de la
(siempre que ejecute una instrucción de la MVJ de asignación a la variable)
(para poner en la copia de la variable el valor transmitido desde memoria
 use
variable)
 assign
 load
principal)
 store (para transmitir a memoria principal el valor de la copia de la variable)
 Ejecutables por la memoria principal
 read
de
 write
memoria
(para transmitir el contenido de la copia maestra de la variable a la memoria
trabajo del thread)
(para poner en la copia maestra de la variable el valor transmitido desde
de trabajo del thread)
 Ejecutables en sincronización por un thread y la memoria
principal
 lock
 unlock
(para adquirir un claim en un cerrojo particular)
(para liberar un derecho sobre un cerrojo particular)
25
Acceso a variables en la MVJ
Memoria Principal
x
Thread
Máquina de ejecución
x
Memoria de trabajo
x
x
read
load
store
x
write
copia
maestra assign
use
26
Threads y Locks en la MVJ
 Reglas de orden de ejecución
 Las acciones realizadas por cada thread están totalmente
ordenadas
 Las acciones realizadas por la memoria principal sobre
cualquier variable están totalmente ordenadas
 Las acciones realizadas por la memoria principal sobre
cualquier cerrojo están totalmente ordenadas
 No se permite que ninguna acción se siga a sí misma
 Relación entre las acciones de un thread y memoria
principal
 Toda acción lock y unlock se realiza a la vez por un thread y
la memoria principal
 Toda acción load sigue a una acción read
 Toda acción write sigue a una acción store
27
Threads y Locks en la MVJ
 Variables long y double (no declaradas como
volatile)
 Se consideran en la MVJ como 2 variables de 32 bits cada
una
• Son necesarias dos operaciones load, store, read o write
para tratarlas
• Para soportar procesadores de 32 bits
• Aunque se admite que haya implementaciones de la MVJ
con operaciones de 64bits atómicas (y actualmente se
recomienda incluso)
28
Threads y Locks en la MVJ
 Reglas sobre cerrojos
 Un cerrojo sólo puede pertenecer a un thread en un
momento dado
 El cerrojo sólo quedará libre cuando el thread haga
tantos unlock como lock hubiera hecho
 Un thread no puede hacer unlock de un cerrojo que no
poseyera
 Reglas sobre cerrojos y variables
 Antes de hacer una operación unlock un thread debe
copiar en memoria principal todas las variables a las
que hubiera asignado
 Después de hacer lock un thread debe recargar de
memoria principal todas las variables que utilice
29
Threads y Locks en la MVJ
public class Ejemplo {
int x = 1, y = 2;
void uno() {
x =y;
}
void dos() {
y =x;
}
}
load x
use x
assign y
[ store y]
load y
use y
assign x
[ store x]
threa d uno memori a principal threa ddos
read y read x
[ write x] [ write y]
En este ejemplo en memoria principal puede acabar ocurriendo:
• que x acabe valiendo lo que y
• o que y acabe valiendo lo que x
• o que se cambien los valores de x e y
30
Threads y Locks en la MVJ
public class EjemploSincronizado
{
int x = 1, y = 2;
synchronized void uno() {
x = y;
}
synchronized void dos() {
y = x;
}
}
Al usar la operación unlock se obliga a escribir en memoria principal, y por
haber utilizado lock hay menos combinaciones, así que bien:
• o x acaba valiendo lo que y
• o y acaba valiendo lo que x
• y no puede haber intercambio de valores
31
Threads y Locks en la MVJ
threa d dos
lock EjemploSincronizado
load x
use x
assign y
[ store y]
threa d uno
lock EjemploSincronizado
load y
use y
assign x
[ store x]
memori a principal
read y read x
[ write x] [ write y]
unlock EjemploSincronizado unlock EjemploSincronizado
33
Requisitos en programación concurrente OO
 Seguridad: requisitos de integridad
 Viveza: requisitos de progreso
 Eficiencia: requisitos de efectividad
 Reusabilidad: requisitos composicionales
Políticas y
protocolos
reglas de diseño
a lo largo del
sistema
Estructuras de
objetos
patrones de diseño
microarquitectura
Técnicas de
codificación
idioms
trucos
34
Patrones de programación concurrente
 Patrones de diseño de seguridad
 Propiedades de seguridad: Nada malo ocurrirá
 Los patrones tratan básicamente de evitar que el
estado del sistema se haga inconsistente
 Patrones de diseño de viveza
 Propiedades de seguridad: Nada malo ocurrirá
 Los patrones tratan básicamente de evitar que el
estado del sistema se haga inconsistente
35
Patrones de diseño de seguridad
 Objetos seguros: realizar acciones sólo cuando se está en
un estado consistente
 Conflictos lectura/escritura
 Fallos en invariantes
 Estrategias para mantener la consistencia de estado en los
objetos accedidos concurrentemente:
 Inmutabilidad: Evitar los cambios de estado
 Sincronización mediante cerrojos: Asegurar dinámicamente
un acceso exclusivo
 Contenimiento: Asegurar estructuralmente un acceso
exclusivo ocultando objetos internos
 Dependencia de estado: qué hacer cuando no se puede hacer
nada
 Partición: separar los aspectos independientes de objetos y
cerrojos
36
Patrones de diseño de seguridad
 Inmutabilidad
 Los objetos no se modifican, se crean
• Vale para objetos que proporcionan servicios sin estado
• Ejemplos: clases String, Integer y Color de Java
• Otro ejemplo:
public class Punto {
private int x, y; // coordenadas fijas
public Punto(int x, int y) { this.x = x; this.y = y; }
// otros métodos que no cambian los valores de las
coordenadas
public x() { return x; }
public y() { return y; }
}
37
Patrones de diseño de seguridad
 Objetos sincronizados (cerrojos)
 Cuando el estado de los objetos puede cambiar, es
necesario sincronizar el acceso a los métodos que
pueden leer o modificar sus atributos
 Básicamente puede haber dos tipos de conflictos al
acceder a una variable:
• Conflictos de lectura-escritura
• Conflictos de escritura-escritura
 Uso de cerrojos:
• Adquirir el objeto cerrojo al entrar en el método,
devolverlo al regresar
• Garantiza la atomicidad de los métodos
• Riesgo de interbloqueos
38
Patrones de diseño de seguridad
 Objetos sincronizados (cerrojos)
 En general basta con declarar todos los métodos como
synchronized
• Cada método debe ser corto de ejecución y asegurar que
siempre acaba (para garantizar la viveza)
• En algunos casos no es necesario declarar el método
synchronized:
• Métodos de acceso a valores de atributos de tipos
sencillos
• Explotar la inmutabilidad parcial
• Arreglar la concurrencia para cada método
39
Patrones de diseño de viveza
 Cada actividad debe progresar
 cada método llamado tendrá que ejecutarse alguna vez
 Problemas de viveza:
 Contención: un thread no deja el procesador
 Reposo indefinido: un thread bloqueado nunca pasa a
listo
• Tras suspend nadie hace resume
• Tras wait nadie hace notify
 Interbloqueo entre threads que se bloquean uno a otro
 Terminación prematura: un thread muere antes de lo
debido (p.ej. con stop)
 Eficiencia
 Cada método llamada debería ejecutarse lo antes
posible
40
Patrones de diseño de viveza
 Balance seguridad-viveza: estrategias de diseño
 Primero la seguridad:
• Asegurar que cada clase es segura (todos los métodos
como synchronized) y entonces intentar mejorar la viveza
para mejorar la eficiencia
• Análisis de métodos de acceso al monitor
• Partición de la sincronización
• Riesgo: Puede resultar en código lento o propenso a
interbloqueos
 Primero la viveza:
• Al principio no se tienen políticas de sincronización, y se
añaden después con compuestos, subclases, cerrojos,
etc.
• Riesgo: puede resultar en código con errores de
condiciones de carrera
41
Acciones dependientes del estado
 El estado de un objeto puede tener dos tipos de
condiciones de activación:
 Internas: el objeto está en un estado apropiado para
realizar una acción
 Externas: el objeto recibe un mensaje de otro
pidiéndole que realice una acción
Precondiciones acción Postcondiciones
42
Acciones dependientes del estado
 Estrategia general:
 Para cada condición que necesite esperarse, escribir un
bucle guardado con un wait()
 Asegurar que todo método que cambie el estado que
afecte a las condiciones guardadas invoque notifyAll()
para despertar cualquier thread que estuviera
esperando un cambio de estado
while ( ! condicion ) {
try { wait (); }
catch ( InterruptedExcepti on e) { //...
}
}
// ...
condicion = true ;
notifyAll ();
43
Acciones dependientes del estado
public class Semaforo {
private int cuenta;
Semaforo(int cuentaInicial) { cuenta = cuentaInicial; }
public synchronized void P(){
while ( cuenta <= 0 )
try { wait(); }
catch(InterruptedException e) {}
cuenta--;
}
public synchronized void V(){
cuenta++;
notify();
}
}
Ejemplo clásico: semáforo
44
Acciones dependientes del estado
 Políticas para tratar pre- y post-condiciones
 Acciones ciegas: proceder en cualquier caso, sin
garantías sobre el resultado
 Inacción: ignorar la petición si no se está en estado
correcto
 Expulsión: Enviar una excepción si no se está en el
estado correcto
 Guardas: suspender hasta que se esté en estado
correcto
 Intento: proceder, ver si hubo éxito, y si no, rollback
 Reintento: seguir intentando hasta tener éxito
 Temporización: esperar o reintentar durante un
tiempo, luego fallar
 Planificación: iniciar primero una actividad que nos
lleve a un estado correcto

Más contenido relacionado

Similar a programacion concurrente java.pptx (20)

Hilos En Java
Hilos En JavaHilos En Java
Hilos En Java
 
Tema2
Tema2Tema2
Tema2
 
Lenguaje java
Lenguaje javaLenguaje java
Lenguaje java
 
Fondo1 (2)
Fondo1 (2)Fondo1 (2)
Fondo1 (2)
 
Procesos e Hilos en los Sistemas Operativos
Procesos e Hilos en los Sistemas OperativosProcesos e Hilos en los Sistemas Operativos
Procesos e Hilos en los Sistemas Operativos
 
Hilos con Posix
Hilos con PosixHilos con Posix
Hilos con Posix
 
Java
JavaJava
Java
 
Lenguaje Java
Lenguaje JavaLenguaje Java
Lenguaje Java
 
Multitarea
MultitareaMultitarea
Multitarea
 
Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
 
Manual practicassd
Manual practicassdManual practicassd
Manual practicassd
 
Conceptos Fundamentales de POO
Conceptos Fundamentales de POOConceptos Fundamentales de POO
Conceptos Fundamentales de POO
 
Atix23
Atix23Atix23
Atix23
 
Atix23
Atix23Atix23
Atix23
 
Chap 15fpin
Chap 15fpinChap 15fpin
Chap 15fpin
 
855
855855
855
 
Manual.curso.de.java.desde.cero
Manual.curso.de.java.desde.ceroManual.curso.de.java.desde.cero
Manual.curso.de.java.desde.cero
 
Semana9 Vbr
Semana9 VbrSemana9 Vbr
Semana9 Vbr
 
De Threads a CompletableFutures
De Threads a CompletableFuturesDe Threads a CompletableFutures
De Threads a CompletableFutures
 
Java desde 0 pre
Java desde 0 preJava desde 0 pre
Java desde 0 pre
 

Más de juan gonzalez

METODOS HEREDADOS EN LA PROGRAMACION .pptx
METODOS HEREDADOS EN LA PROGRAMACION .pptxMETODOS HEREDADOS EN LA PROGRAMACION .pptx
METODOS HEREDADOS EN LA PROGRAMACION .pptxjuan gonzalez
 
TIPOS DE COMUNICACION EN LAS OFICINAS.pptx
TIPOS DE COMUNICACION EN LAS OFICINAS.pptxTIPOS DE COMUNICACION EN LAS OFICINAS.pptx
TIPOS DE COMUNICACION EN LAS OFICINAS.pptxjuan gonzalez
 
Politicas-de-ruteo-con-MikroTik-RouterOS.pptx
Politicas-de-ruteo-con-MikroTik-RouterOS.pptxPoliticas-de-ruteo-con-MikroTik-RouterOS.pptx
Politicas-de-ruteo-con-MikroTik-RouterOS.pptxjuan gonzalez
 
METODO DE SOBRECARGA EN PROGRAMACION.pptx
METODO DE SOBRECARGA EN PROGRAMACION.pptxMETODO DE SOBRECARGA EN PROGRAMACION.pptx
METODO DE SOBRECARGA EN PROGRAMACION.pptxjuan gonzalez
 
Mecanismos-de-abstraccion-en-Java PARA PROGRAMAR.pptx
Mecanismos-de-abstraccion-en-Java PARA PROGRAMAR.pptxMecanismos-de-abstraccion-en-Java PARA PROGRAMAR.pptx
Mecanismos-de-abstraccion-en-Java PARA PROGRAMAR.pptxjuan gonzalez
 
recursividad EN PROGRAMACION ORIENTADA .pptx
recursividad EN PROGRAMACION ORIENTADA .pptxrecursividad EN PROGRAMACION ORIENTADA .pptx
recursividad EN PROGRAMACION ORIENTADA .pptxjuan gonzalez
 
OBJETIVO 5 VECTORES que se utilizan en la programacion.pptx
OBJETIVO 5 VECTORES que se utilizan en la programacion.pptxOBJETIVO 5 VECTORES que se utilizan en la programacion.pptx
OBJETIVO 5 VECTORES que se utilizan en la programacion.pptxjuan gonzalez
 
ESCANER E IMPRESORAS para las oficinas.pptx
ESCANER E IMPRESORAS para las oficinas.pptxESCANER E IMPRESORAS para las oficinas.pptx
ESCANER E IMPRESORAS para las oficinas.pptxjuan gonzalez
 
AGENDA DIGITAL. para las organizacionespptx
AGENDA DIGITAL. para las organizacionespptxAGENDA DIGITAL. para las organizacionespptx
AGENDA DIGITAL. para las organizacionespptxjuan gonzalez
 
MULTIMETRO para medir los niveles electricos.pptx
MULTIMETRO para medir los niveles  electricos.pptxMULTIMETRO para medir los niveles  electricos.pptx
MULTIMETRO para medir los niveles electricos.pptxjuan gonzalez
 
DISTRIBUCION DE PRODUCTOS BASISCOS DE LAS EMPRESAS
DISTRIBUCION DE PRODUCTOS BASISCOS DE LAS EMPRESASDISTRIBUCION DE PRODUCTOS BASISCOS DE LAS EMPRESAS
DISTRIBUCION DE PRODUCTOS BASISCOS DE LAS EMPRESASjuan gonzalez
 
COMERCIO ELECTRONICO COMO SOPORTE PARA LAS EMPRESAS
COMERCIO ELECTRONICO COMO SOPORTE PARA LAS EMPRESASCOMERCIO ELECTRONICO COMO SOPORTE PARA LAS EMPRESAS
COMERCIO ELECTRONICO COMO SOPORTE PARA LAS EMPRESASjuan gonzalez
 
MODELO NEGOCIOS PARA LAS EMPRESAS PUBLICAS Y PRIVADAS
MODELO NEGOCIOS PARA LAS EMPRESAS PUBLICAS Y PRIVADASMODELO NEGOCIOS PARA LAS EMPRESAS PUBLICAS Y PRIVADAS
MODELO NEGOCIOS PARA LAS EMPRESAS PUBLICAS Y PRIVADASjuan gonzalez
 
programaciON EXTREMA.pptx
programaciON EXTREMA.pptxprogramaciON EXTREMA.pptx
programaciON EXTREMA.pptxjuan gonzalez
 
metodologia asd.pptx
metodologia asd.pptxmetodologia asd.pptx
metodologia asd.pptxjuan gonzalez
 
metodologia scrum.pptx
metodologia scrum.pptxmetodologia scrum.pptx
metodologia scrum.pptxjuan gonzalez
 
METODOLOGIA RUP.pptx
METODOLOGIA RUP.pptxMETODOLOGIA RUP.pptx
METODOLOGIA RUP.pptxjuan gonzalez
 
caractersticas de los medios de transmision de datos.pptx
caractersticas de los medios de transmision de datos.pptxcaractersticas de los medios de transmision de datos.pptx
caractersticas de los medios de transmision de datos.pptxjuan gonzalez
 

Más de juan gonzalez (20)

METODOS HEREDADOS EN LA PROGRAMACION .pptx
METODOS HEREDADOS EN LA PROGRAMACION .pptxMETODOS HEREDADOS EN LA PROGRAMACION .pptx
METODOS HEREDADOS EN LA PROGRAMACION .pptx
 
TIPOS DE COMUNICACION EN LAS OFICINAS.pptx
TIPOS DE COMUNICACION EN LAS OFICINAS.pptxTIPOS DE COMUNICACION EN LAS OFICINAS.pptx
TIPOS DE COMUNICACION EN LAS OFICINAS.pptx
 
Politicas-de-ruteo-con-MikroTik-RouterOS.pptx
Politicas-de-ruteo-con-MikroTik-RouterOS.pptxPoliticas-de-ruteo-con-MikroTik-RouterOS.pptx
Politicas-de-ruteo-con-MikroTik-RouterOS.pptx
 
METODO DE SOBRECARGA EN PROGRAMACION.pptx
METODO DE SOBRECARGA EN PROGRAMACION.pptxMETODO DE SOBRECARGA EN PROGRAMACION.pptx
METODO DE SOBRECARGA EN PROGRAMACION.pptx
 
Mecanismos-de-abstraccion-en-Java PARA PROGRAMAR.pptx
Mecanismos-de-abstraccion-en-Java PARA PROGRAMAR.pptxMecanismos-de-abstraccion-en-Java PARA PROGRAMAR.pptx
Mecanismos-de-abstraccion-en-Java PARA PROGRAMAR.pptx
 
recursividad EN PROGRAMACION ORIENTADA .pptx
recursividad EN PROGRAMACION ORIENTADA .pptxrecursividad EN PROGRAMACION ORIENTADA .pptx
recursividad EN PROGRAMACION ORIENTADA .pptx
 
OBJETIVO 5 VECTORES que se utilizan en la programacion.pptx
OBJETIVO 5 VECTORES que se utilizan en la programacion.pptxOBJETIVO 5 VECTORES que se utilizan en la programacion.pptx
OBJETIVO 5 VECTORES que se utilizan en la programacion.pptx
 
ESCANER E IMPRESORAS para las oficinas.pptx
ESCANER E IMPRESORAS para las oficinas.pptxESCANER E IMPRESORAS para las oficinas.pptx
ESCANER E IMPRESORAS para las oficinas.pptx
 
AGENDA DIGITAL. para las organizacionespptx
AGENDA DIGITAL. para las organizacionespptxAGENDA DIGITAL. para las organizacionespptx
AGENDA DIGITAL. para las organizacionespptx
 
MULTIMETRO para medir los niveles electricos.pptx
MULTIMETRO para medir los niveles  electricos.pptxMULTIMETRO para medir los niveles  electricos.pptx
MULTIMETRO para medir los niveles electricos.pptx
 
DISTRIBUCION DE PRODUCTOS BASISCOS DE LAS EMPRESAS
DISTRIBUCION DE PRODUCTOS BASISCOS DE LAS EMPRESASDISTRIBUCION DE PRODUCTOS BASISCOS DE LAS EMPRESAS
DISTRIBUCION DE PRODUCTOS BASISCOS DE LAS EMPRESAS
 
COMERCIO ELECTRONICO COMO SOPORTE PARA LAS EMPRESAS
COMERCIO ELECTRONICO COMO SOPORTE PARA LAS EMPRESASCOMERCIO ELECTRONICO COMO SOPORTE PARA LAS EMPRESAS
COMERCIO ELECTRONICO COMO SOPORTE PARA LAS EMPRESAS
 
MODELO NEGOCIOS PARA LAS EMPRESAS PUBLICAS Y PRIVADAS
MODELO NEGOCIOS PARA LAS EMPRESAS PUBLICAS Y PRIVADASMODELO NEGOCIOS PARA LAS EMPRESAS PUBLICAS Y PRIVADAS
MODELO NEGOCIOS PARA LAS EMPRESAS PUBLICAS Y PRIVADAS
 
programaciON EXTREMA.pptx
programaciON EXTREMA.pptxprogramaciON EXTREMA.pptx
programaciON EXTREMA.pptx
 
metodologia asd.pptx
metodologia asd.pptxmetodologia asd.pptx
metodologia asd.pptx
 
metodologia scrum.pptx
metodologia scrum.pptxmetodologia scrum.pptx
metodologia scrum.pptx
 
METODOLOGIA RUP.pptx
METODOLOGIA RUP.pptxMETODOLOGIA RUP.pptx
METODOLOGIA RUP.pptx
 
METODOLOGIAS.pptx
METODOLOGIAS.pptxMETODOLOGIAS.pptx
METODOLOGIAS.pptx
 
PARADIGMAS.ppt
PARADIGMAS.pptPARADIGMAS.ppt
PARADIGMAS.ppt
 
caractersticas de los medios de transmision de datos.pptx
caractersticas de los medios de transmision de datos.pptxcaractersticas de los medios de transmision de datos.pptx
caractersticas de los medios de transmision de datos.pptx
 

Último

sistema de construcción Drywall semana 7
sistema de construcción Drywall semana 7sistema de construcción Drywall semana 7
sistema de construcción Drywall semana 7luisanthonycarrascos
 
clases de dinamica ejercicios preuniversitarios.pdf
clases de dinamica ejercicios preuniversitarios.pdfclases de dinamica ejercicios preuniversitarios.pdf
clases de dinamica ejercicios preuniversitarios.pdfDanielaVelasquez553560
 
Linealización de sistemas no lineales.pdf
Linealización de sistemas no lineales.pdfLinealización de sistemas no lineales.pdf
Linealización de sistemas no lineales.pdfrolandolazartep
 
Manual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdfManual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdfedsonzav8
 
MANIOBRA Y CONTROL INNOVATIVO LOGO PLC SIEMENS
MANIOBRA Y CONTROL INNOVATIVO LOGO PLC  SIEMENSMANIOBRA Y CONTROL INNOVATIVO LOGO PLC  SIEMENS
MANIOBRA Y CONTROL INNOVATIVO LOGO PLC SIEMENSLuisLobatoingaruca
 
Unidad 3 Administracion de inventarios.pptx
Unidad 3 Administracion de inventarios.pptxUnidad 3 Administracion de inventarios.pptx
Unidad 3 Administracion de inventarios.pptxEverardoRuiz8
 
Calavera calculo de estructuras de cimentacion.pdf
Calavera calculo de estructuras de cimentacion.pdfCalavera calculo de estructuras de cimentacion.pdf
Calavera calculo de estructuras de cimentacion.pdfyoseka196
 
ECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdfECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdffredyflores58
 
Flujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptxFlujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptxEduardoSnchezHernnde5
 
Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...
Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...
Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...Francisco Javier Mora Serrano
 
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)ssuser563c56
 
Diapositiva de Topografía Nivelación simple y compuesta
Diapositiva de Topografía Nivelación simple y compuestaDiapositiva de Topografía Nivelación simple y compuesta
Diapositiva de Topografía Nivelación simple y compuestajeffsalazarpuente
 
Propositos del comportamiento de fases y aplicaciones
Propositos del comportamiento de fases y aplicacionesPropositos del comportamiento de fases y aplicaciones
Propositos del comportamiento de fases y aplicaciones025ca20
 
SOLICITUD-PARA-LOS-EGRESADOS-UNEFA-2022.
SOLICITUD-PARA-LOS-EGRESADOS-UNEFA-2022.SOLICITUD-PARA-LOS-EGRESADOS-UNEFA-2022.
SOLICITUD-PARA-LOS-EGRESADOS-UNEFA-2022.ariannytrading
 
Una estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NISTUna estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NISTFundación YOD YOD
 
estadisticasII Metodo-de-la-gran-M.pdf
estadisticasII   Metodo-de-la-gran-M.pdfestadisticasII   Metodo-de-la-gran-M.pdf
estadisticasII Metodo-de-la-gran-M.pdfFlorenciopeaortiz
 
SSOMA, seguridad y salud ocupacional. SST
SSOMA, seguridad y salud ocupacional. SSTSSOMA, seguridad y salud ocupacional. SST
SSOMA, seguridad y salud ocupacional. SSTGestorManpower
 
¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptx
¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptx¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptx
¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptxguillermosantana15
 
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIPSEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIPJosLuisFrancoCaldern
 
Introducción a los sistemas neumaticos.ppt
Introducción a los sistemas neumaticos.pptIntroducción a los sistemas neumaticos.ppt
Introducción a los sistemas neumaticos.pptEduardoCorado
 

Último (20)

sistema de construcción Drywall semana 7
sistema de construcción Drywall semana 7sistema de construcción Drywall semana 7
sistema de construcción Drywall semana 7
 
clases de dinamica ejercicios preuniversitarios.pdf
clases de dinamica ejercicios preuniversitarios.pdfclases de dinamica ejercicios preuniversitarios.pdf
clases de dinamica ejercicios preuniversitarios.pdf
 
Linealización de sistemas no lineales.pdf
Linealización de sistemas no lineales.pdfLinealización de sistemas no lineales.pdf
Linealización de sistemas no lineales.pdf
 
Manual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdfManual_Identificación_Geoformas_140627.pdf
Manual_Identificación_Geoformas_140627.pdf
 
MANIOBRA Y CONTROL INNOVATIVO LOGO PLC SIEMENS
MANIOBRA Y CONTROL INNOVATIVO LOGO PLC  SIEMENSMANIOBRA Y CONTROL INNOVATIVO LOGO PLC  SIEMENS
MANIOBRA Y CONTROL INNOVATIVO LOGO PLC SIEMENS
 
Unidad 3 Administracion de inventarios.pptx
Unidad 3 Administracion de inventarios.pptxUnidad 3 Administracion de inventarios.pptx
Unidad 3 Administracion de inventarios.pptx
 
Calavera calculo de estructuras de cimentacion.pdf
Calavera calculo de estructuras de cimentacion.pdfCalavera calculo de estructuras de cimentacion.pdf
Calavera calculo de estructuras de cimentacion.pdf
 
ECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdfECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdf
 
Flujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptxFlujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptx
 
Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...
Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...
Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...
 
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)
 
Diapositiva de Topografía Nivelación simple y compuesta
Diapositiva de Topografía Nivelación simple y compuestaDiapositiva de Topografía Nivelación simple y compuesta
Diapositiva de Topografía Nivelación simple y compuesta
 
Propositos del comportamiento de fases y aplicaciones
Propositos del comportamiento de fases y aplicacionesPropositos del comportamiento de fases y aplicaciones
Propositos del comportamiento de fases y aplicaciones
 
SOLICITUD-PARA-LOS-EGRESADOS-UNEFA-2022.
SOLICITUD-PARA-LOS-EGRESADOS-UNEFA-2022.SOLICITUD-PARA-LOS-EGRESADOS-UNEFA-2022.
SOLICITUD-PARA-LOS-EGRESADOS-UNEFA-2022.
 
Una estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NISTUna estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NIST
 
estadisticasII Metodo-de-la-gran-M.pdf
estadisticasII   Metodo-de-la-gran-M.pdfestadisticasII   Metodo-de-la-gran-M.pdf
estadisticasII Metodo-de-la-gran-M.pdf
 
SSOMA, seguridad y salud ocupacional. SST
SSOMA, seguridad y salud ocupacional. SSTSSOMA, seguridad y salud ocupacional. SST
SSOMA, seguridad y salud ocupacional. SST
 
¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptx
¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptx¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptx
¿QUE SON LOS AGENTES FISICOS Y QUE CUIDADOS TENER.pptx
 
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIPSEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
 
Introducción a los sistemas neumaticos.ppt
Introducción a los sistemas neumaticos.pptIntroducción a los sistemas neumaticos.ppt
Introducción a los sistemas neumaticos.ppt
 

programacion concurrente java.pptx

  • 2. 2 Concurrencia  En el mundo real, muchas cosas pasan a la vez  Con varias computadoras se pueden ejecutar varios programas a la vez  Con una sola computadora se puede simular la ejecución paralela de varias actividades:  múltiples flujos de ejecución (multithreading) comparten el uso de un procesador  Java soporta la ejecución paralela de varios threads (hilos de ejecución)  Los threads en una misma máquina virtual comparten recursos • por ejemplo, memoria  Los threads en varias máquinas virtuales necesitan de mecanismos de comunicación para compartir información
  • 3. © Juan Pavón Mestras, UCM 2001 Programación concurrentecon Java 3 Concurrencia  Para qué:  Mejorar la disponibilidad y eficiencia  Modelar tareas, objetos autónomos, animación  Paralelismo: múltiples procesadores, simultanear E/S  Protección: aislar actividades en hilos de ejecución  Ejemplos: • Tareas con mucha E/S: acceso a sitios web, bases de datos • Interfaces gráficas de usuario: gestión de eventos • Demonios con múltiples peticiones de servicio simultáneas • Simulación  Con cuidado:  Complejidad: seguridad, viveza, composición  Sobrecarga: Mayor uso de recursos
  • 4. 4 Programación concurrente OO  La concurrencia es natural en orientación a objetos  Ya Simula67 soportaba concurrencia  Diferencias con otros modelos de concurrencia  Programación OO secuencial • Tiene más importancia la seguridad y la viveza • Pero también usa y extiende patrones de diseño comunes  Programación orientada a eventos • Permite que pueda haber múltiples eventos a la vez • Pero usa y extiende estrategias de mensajería  Programación multithread de sistemas • Añade encapsulación y modularidad • Pero usa y extiende implementaciones eficientes
  • 5. 5 Programación concurrente OO  Concurrencia y reusabilidad  Mayor complejidad • Criterios de corrección más duros que con código secuencial • El no determinismo impide la depuración y el entendimiento del código  Mayor dependencia del contexto • Los componentes son seguros y vivos sólo en determinados contextos: necesidad de documentación • Puede ser difícil extender mediante herencia (anomalías) • Puede ser difícil la composición: conflictos entre técnicas de control de la concurrencia
  • 6. 6 Programación concurrente OO  Políticas de diseño  Ejemplos • Dependencia de estado: qué hacer cuando se recibeuna petición que no se puede realizar • Disponibilidad de servicio: Restricciones en el acceso concurrente a los métodos • Restricciones de flujos: Establecer direccionabilidad y reglas de capas para los mensajes  Combaten la complejidad • Reglas de diseño de alto nivel y restricciones arquitecturales evitan decisiones caso por caso inconsistentes  Mantener la apertura • Acomodar componentes que obedecen políticas determinadas
  • 7. 7 Modelos de objetos  4 operaciones básicas  Aceptar un mensaje  Actualizar el estado local  Enviar un mensaje  Crear un nuevo objeto  Dependiendo de las reglas para estas operaciones, hay 2 categorías de modelos:  Objetos activos  Objetos pasivos
  • 8. 8 Modelo de objetos pasivos main E/S •En programas secuenciales, sólo un objeto Programa es activo •Los objetos pasivos encapsulan datos del programa pasivo Objeto Objeto ObjetopasivoObjeto pasivo ObjetpoasivoObjeto pasivo pasivo programa
  • 9. 9 Modelo de objetos activos mensaje •Cada objeto tiene su propio hilo de ejecución (sólo puede hacer una cosa a la vez) accion { actualiza estado envia mensaje oneway crea objeto }
  • 10. 10 Sistemas = Objetos + Actividades  Objetos  TADs, componentes agregados, monitores, objetos de negocio (EJBs), servlets, objetos CORBA remotos  Se pueden agrupar de acuerdo a estructura, role, ...  Se pueden usar para múltiples actividades • Lo más importante es la SEGURIDAD  Actividades  Mensajes, cadenas de llamadas, workflows, hilos de ejecución, sesiones, escenarios, scripts, casos de uso, transacciones, flujos de datos  Se pueden agrupar por origen, función, ...  Comprenden múltiples objetos • Lo más importante es la VIVEZA
  • 11. 11 Java  Soporte para ingeniería de software  Empaquetado: objetos, clases, componentes, paquetes  Portabilidad: bytecode, unicode, transportes varios  Extensibilidad: Subclases, interfaces, class loader  Seguridad: máquina virtual, verificadores de código  Bibliotecas: paquetes java.*  Ubicuidad: corre en casi todas partes  Retos en nuevos aspectos de la programación  Concurrencia: threads, locks  Distribución: RMI, CORBA  Persistencia: Serialización, JDBC  Seguridad: gestores de seguridad, dominios
  • 12. 12 Concurrencia en Java  El código que ejecuta un thread se define en clases que implementan la interfaz Runnable public interface Runnable { public void run(); }
  • 13. 13 Concurrencia en Java  Clase Thread  Un hilo de ejecución en un programa  Métodos • run() • start() • join() • interrupt() actividad del thread activa run() y vuelve al llamante espera por la terminación (timeout opcional) sale de un wait, sleep o join • isInterrupted() • yield() • stop(), suspend(), resume() (deprecated)  Métodos estáticos • sleep(milisegundos) • currentTread()  Métodos de la clase Object que controlan la suspensión de threads • wait(), wait(milisegundos), notify(), notifyAll()
  • 14. 14 Concurrencia en Java  Creación de Threads: class MiThread extends Thread {...} => new MiThread() class MiThread implements Runnable {...} => new Thread(new MiThread())
  • 15. 15 Concurrencia en Java import java.lang.Math; class EjemploThread extends Thread { int numero; EjemploThread (int n) { numero = n; } public void run() { try { while (true){ System.out.println (numero); sleep((long)(1000*Math.random())); } } catch (InterruptedException e) { return; } // acaba este thread } public static void main (String args[]){ for (int i=0; i<10; i++) new EjemploThread(i).start(); } } import java.lang.Math; class EjemploThread extends Thread { int numero; EjemploThread (int n) { numero = n; } public void run() { try { while (true){ System.out.println (numero); sleep((long)(1000*Math.random())); } } catch (InterruptedException e) { return; } // acaba este thread } public static void main (String args[]){ for (int i=0; i<10; i++) new EjemploThread(i).start(); } } SALIDA 1 4 5 6 2 9 8 4 3 0 7 3 7 2 8 3 1 9 ...
  • 16. 16 Sincronización en Java  Necesaria para evitar colisiones entre hilos de ejecución  Por ejemplo, accesos a memoria o a un recurso a la vez  Sincronización:  synchronized método (...) {...} // a nivel de objeto // a nivel de bloque de  synchronized (objeto) { ... } código  Métodos  wait() y wait(timeout) El thread se queda bloqueado hasta que algún otro le mande una señal (notify) y entonces pasa a la cola de listos para ejecutar  notify() y notifyAll() •  No es fácil la correcta programación de la concurrencia y la sincronización
  • 17. 17 Sincronización en Java public class NoSincronizada extends Thread{ static int n = 1; public void run() { for (int i = 0; i < 10; i++) { System.out.println(n); n++; } } public static void main(String args[]) { Thread thr1 = new NoSincronizada(); Thread thr2 = new NoSincronizada(); thr1.start(); thr2.start(); } } 1 2 3 4 5 6 7 8 8 9 10 11 12 14 15 16 17 18 19 20 Posible resultado de ejecución ? ¿?
  • 18. 19 Monitores en Java  Un monitor es un objeto que implementa el acceso en exclusión mutua a sus métodos  En Java se aplica a los métodos de la clase declarados como synchronized • Los demás métodos pueden accederse concurrentemente independientemente de si algún thread accede a ellos o a un método synchronized // ...dentro de código synchronized, ya que el hilo debe ser el propietario del monitor // del objeto. Liberará el monitor hasta que lo despierten con notify o notifyAll, y // pueda retomar control del monitor try { wait(); // o wait(0); } catch (InterruptedException e) { System.out.println(“Interrumpido durante el wait"); } // ...también dentro de código synchronized notify(); // o notifyAll();
  • 19. 20 Monitores en Java  Disciplinas de señalización de monitores  Signal and exit : Después de hacer notify el thread debe salir del monitor y el thread que recibe la señal es el siguiente en entrar en el monitor  Signal and continue: El thread que recibe la señal no tiene que ser necesariamente el siguiente en entrar en el monitor • Puede haber intromisión: Antes que el thread despertado podría entrar un thread que estuviera bloqueado en la llamada a un método synchronized  En Java:  Los monitores siguen la disciplina signal and continue  Tampoco se garantiza que el thread que más tiempo lleve esperando sea el que reciba la señal con un notify()  Cuando se usa notifyAll() para pasar todos los threads en wait a la cola de listos para ejecutar, el primer thread en entrar en el monitor no será necesariamente el que más tiempo lleve esperando
  • 20. 22 Propiedades de los programas concurrentes  En programación secuencial: Corrección parcial (Si el programa termina, realiza su función correctamente) + Terminación (el programa termina alguna vez) = Corrección total  En programación concurrente:  Propiedades de seguridad (Si el sistema evoluciona, lo hace correctamente)  Propiedades de viveza (Si algo debe ocurrir, alguna vez ocurre)  Equidad (Todo proceso que evoluciona lo hace recibiendo un trato equitativo de los recursos)  Para verificar estas propiedades en un programa Java hay que entender cómo funciona la MVJ (y también para programar mejor...)
  • 21. 23 Threads y Locks en la MVJ Conceptos para la definición del funcionamiento de la MVJ  Variables son los lugares en los que un programa puede almacenar algo  Variables de clases (static) y de objetos, y también componentes de arrays  Las variables se guardan en una memoria principal que es compartida por todos los threads  Cada thread tiene su propia memoria de trabajo  El thread trabaja con copia de las variables en la memoria de trabajo  La memoria principal tiene una copia maestra de cada variable  La memoria principal puede contener también cerrojos (locks)  Todo objeto Java tiene asociado un lock  Los threads pueden competir para adquirir un lock
  • 22. 24 Threads y Locks en la MVJ Operaciones atómicas en la MVJ  Ejecutables por threads: (siempre que ejecute una instrucción de la MVJ que usa el valor de la (siempre que ejecute una instrucción de la MVJ de asignación a la variable) (para poner en la copia de la variable el valor transmitido desde memoria  use variable)  assign  load principal)  store (para transmitir a memoria principal el valor de la copia de la variable)  Ejecutables por la memoria principal  read de  write memoria (para transmitir el contenido de la copia maestra de la variable a la memoria trabajo del thread) (para poner en la copia maestra de la variable el valor transmitido desde de trabajo del thread)  Ejecutables en sincronización por un thread y la memoria principal  lock  unlock (para adquirir un claim en un cerrojo particular) (para liberar un derecho sobre un cerrojo particular)
  • 23. 25 Acceso a variables en la MVJ Memoria Principal x Thread Máquina de ejecución x Memoria de trabajo x x read load store x write copia maestra assign use
  • 24. 26 Threads y Locks en la MVJ  Reglas de orden de ejecución  Las acciones realizadas por cada thread están totalmente ordenadas  Las acciones realizadas por la memoria principal sobre cualquier variable están totalmente ordenadas  Las acciones realizadas por la memoria principal sobre cualquier cerrojo están totalmente ordenadas  No se permite que ninguna acción se siga a sí misma  Relación entre las acciones de un thread y memoria principal  Toda acción lock y unlock se realiza a la vez por un thread y la memoria principal  Toda acción load sigue a una acción read  Toda acción write sigue a una acción store
  • 25. 27 Threads y Locks en la MVJ  Variables long y double (no declaradas como volatile)  Se consideran en la MVJ como 2 variables de 32 bits cada una • Son necesarias dos operaciones load, store, read o write para tratarlas • Para soportar procesadores de 32 bits • Aunque se admite que haya implementaciones de la MVJ con operaciones de 64bits atómicas (y actualmente se recomienda incluso)
  • 26. 28 Threads y Locks en la MVJ  Reglas sobre cerrojos  Un cerrojo sólo puede pertenecer a un thread en un momento dado  El cerrojo sólo quedará libre cuando el thread haga tantos unlock como lock hubiera hecho  Un thread no puede hacer unlock de un cerrojo que no poseyera  Reglas sobre cerrojos y variables  Antes de hacer una operación unlock un thread debe copiar en memoria principal todas las variables a las que hubiera asignado  Después de hacer lock un thread debe recargar de memoria principal todas las variables que utilice
  • 27. 29 Threads y Locks en la MVJ public class Ejemplo { int x = 1, y = 2; void uno() { x =y; } void dos() { y =x; } } load x use x assign y [ store y] load y use y assign x [ store x] threa d uno memori a principal threa ddos read y read x [ write x] [ write y] En este ejemplo en memoria principal puede acabar ocurriendo: • que x acabe valiendo lo que y • o que y acabe valiendo lo que x • o que se cambien los valores de x e y
  • 28. 30 Threads y Locks en la MVJ public class EjemploSincronizado { int x = 1, y = 2; synchronized void uno() { x = y; } synchronized void dos() { y = x; } } Al usar la operación unlock se obliga a escribir en memoria principal, y por haber utilizado lock hay menos combinaciones, así que bien: • o x acaba valiendo lo que y • o y acaba valiendo lo que x • y no puede haber intercambio de valores
  • 29. 31 Threads y Locks en la MVJ threa d dos lock EjemploSincronizado load x use x assign y [ store y] threa d uno lock EjemploSincronizado load y use y assign x [ store x] memori a principal read y read x [ write x] [ write y] unlock EjemploSincronizado unlock EjemploSincronizado
  • 30. 33 Requisitos en programación concurrente OO  Seguridad: requisitos de integridad  Viveza: requisitos de progreso  Eficiencia: requisitos de efectividad  Reusabilidad: requisitos composicionales Políticas y protocolos reglas de diseño a lo largo del sistema Estructuras de objetos patrones de diseño microarquitectura Técnicas de codificación idioms trucos
  • 31. 34 Patrones de programación concurrente  Patrones de diseño de seguridad  Propiedades de seguridad: Nada malo ocurrirá  Los patrones tratan básicamente de evitar que el estado del sistema se haga inconsistente  Patrones de diseño de viveza  Propiedades de seguridad: Nada malo ocurrirá  Los patrones tratan básicamente de evitar que el estado del sistema se haga inconsistente
  • 32. 35 Patrones de diseño de seguridad  Objetos seguros: realizar acciones sólo cuando se está en un estado consistente  Conflictos lectura/escritura  Fallos en invariantes  Estrategias para mantener la consistencia de estado en los objetos accedidos concurrentemente:  Inmutabilidad: Evitar los cambios de estado  Sincronización mediante cerrojos: Asegurar dinámicamente un acceso exclusivo  Contenimiento: Asegurar estructuralmente un acceso exclusivo ocultando objetos internos  Dependencia de estado: qué hacer cuando no se puede hacer nada  Partición: separar los aspectos independientes de objetos y cerrojos
  • 33. 36 Patrones de diseño de seguridad  Inmutabilidad  Los objetos no se modifican, se crean • Vale para objetos que proporcionan servicios sin estado • Ejemplos: clases String, Integer y Color de Java • Otro ejemplo: public class Punto { private int x, y; // coordenadas fijas public Punto(int x, int y) { this.x = x; this.y = y; } // otros métodos que no cambian los valores de las coordenadas public x() { return x; } public y() { return y; } }
  • 34. 37 Patrones de diseño de seguridad  Objetos sincronizados (cerrojos)  Cuando el estado de los objetos puede cambiar, es necesario sincronizar el acceso a los métodos que pueden leer o modificar sus atributos  Básicamente puede haber dos tipos de conflictos al acceder a una variable: • Conflictos de lectura-escritura • Conflictos de escritura-escritura  Uso de cerrojos: • Adquirir el objeto cerrojo al entrar en el método, devolverlo al regresar • Garantiza la atomicidad de los métodos • Riesgo de interbloqueos
  • 35. 38 Patrones de diseño de seguridad  Objetos sincronizados (cerrojos)  En general basta con declarar todos los métodos como synchronized • Cada método debe ser corto de ejecución y asegurar que siempre acaba (para garantizar la viveza) • En algunos casos no es necesario declarar el método synchronized: • Métodos de acceso a valores de atributos de tipos sencillos • Explotar la inmutabilidad parcial • Arreglar la concurrencia para cada método
  • 36. 39 Patrones de diseño de viveza  Cada actividad debe progresar  cada método llamado tendrá que ejecutarse alguna vez  Problemas de viveza:  Contención: un thread no deja el procesador  Reposo indefinido: un thread bloqueado nunca pasa a listo • Tras suspend nadie hace resume • Tras wait nadie hace notify  Interbloqueo entre threads que se bloquean uno a otro  Terminación prematura: un thread muere antes de lo debido (p.ej. con stop)  Eficiencia  Cada método llamada debería ejecutarse lo antes posible
  • 37. 40 Patrones de diseño de viveza  Balance seguridad-viveza: estrategias de diseño  Primero la seguridad: • Asegurar que cada clase es segura (todos los métodos como synchronized) y entonces intentar mejorar la viveza para mejorar la eficiencia • Análisis de métodos de acceso al monitor • Partición de la sincronización • Riesgo: Puede resultar en código lento o propenso a interbloqueos  Primero la viveza: • Al principio no se tienen políticas de sincronización, y se añaden después con compuestos, subclases, cerrojos, etc. • Riesgo: puede resultar en código con errores de condiciones de carrera
  • 38. 41 Acciones dependientes del estado  El estado de un objeto puede tener dos tipos de condiciones de activación:  Internas: el objeto está en un estado apropiado para realizar una acción  Externas: el objeto recibe un mensaje de otro pidiéndole que realice una acción Precondiciones acción Postcondiciones
  • 39. 42 Acciones dependientes del estado  Estrategia general:  Para cada condición que necesite esperarse, escribir un bucle guardado con un wait()  Asegurar que todo método que cambie el estado que afecte a las condiciones guardadas invoque notifyAll() para despertar cualquier thread que estuviera esperando un cambio de estado while ( ! condicion ) { try { wait (); } catch ( InterruptedExcepti on e) { //... } } // ... condicion = true ; notifyAll ();
  • 40. 43 Acciones dependientes del estado public class Semaforo { private int cuenta; Semaforo(int cuentaInicial) { cuenta = cuentaInicial; } public synchronized void P(){ while ( cuenta <= 0 ) try { wait(); } catch(InterruptedException e) {} cuenta--; } public synchronized void V(){ cuenta++; notify(); } } Ejemplo clásico: semáforo
  • 41. 44 Acciones dependientes del estado  Políticas para tratar pre- y post-condiciones  Acciones ciegas: proceder en cualquier caso, sin garantías sobre el resultado  Inacción: ignorar la petición si no se está en estado correcto  Expulsión: Enviar una excepción si no se está en el estado correcto  Guardas: suspender hasta que se esté en estado correcto  Intento: proceder, ver si hubo éxito, y si no, rollback  Reintento: seguir intentando hasta tener éxito  Temporización: esperar o reintentar durante un tiempo, luego fallar  Planificación: iniciar primero una actividad que nos lleve a un estado correcto