Академический Документы
Профессиональный Документы
Культура Документы
Breve introduccin
Miguel ngel LATRE Dept. de Informtica e Ingeniera de Sistemas
Concurrencia en Java
Hilos de ejecucin
Clase Thread e interfaz Runnable Pausas Interrupciones Citas
Monitores
Exclusin mutua Mtodos wait(), notify() y notifyAll() Cierres de exclusin mutua Semforos, barreras Colecciones (vectores, conjuntos, tablas, colas) concurrentes Variables atmicas
M. Latre 2 Universidad de Zaragoza
Programacin Concurrente
Concurrencia en Java
Hilos de ejecucin
Clase Thread e interfaz Runnable Pausas Interrupciones Citas
Monitores
Exclusin mutua Mtodos wait(), notify() y notifyAll()
Java
Lenguaje orientado a objetos Incluye elementos para la programacin concurrente
Clase Thread e interfaz Runnable Cada objeto es un monitor
Mtodos wait(), notify() y notifyAll()
Programacin Concurrente
Hilos de ejecucin
Cada hilo de ejecucin en Java asociado a un objeto de la clase Thread
(http://download.oracle.com/javase/6/docs/api/java/lang/Thread.html)
Dos posibilidades:
Heredando de la clase Thread
Reescribiendo el mtodo run()
MiPrimerThread +run()
Programacin Concurrente
class Main { public static void main(String[]args){ MiPrimerThread t=new MiPrimerThread(); t.start(); } }
Programacin Concurrente
MiPrimerThread +run()
Programacin Concurrente
Programacin Concurrente
Mi2oThread +run()
Programacin Concurrente
No se garantiza la precisin del tiempo de suspensin Puede ser inferior al especificado, si el hilo es interrumpido Puede lanzar la excepcin InterruptedException
Otro hilo interrumpe al que ha invocado a sleep() mientras estaba suspendido
Programacin Concurrente
Programacin Concurrente
Programacin Concurrente
Programacin Concurrente
Programacin Concurrente
Concurrencia en Java
Hilos de ejecucin
Clase Thread e interfaz Runnable Pausas Interrupciones Citas
Monitores
Exclusin mutua Mtodos wait(), notify() y notifyAll()
Exclusin mutua
public class Contador{ private int c=0; public Contador(int valorInicial){ c=valorInicial; } public void incrementar(){ c++; } public void decrementar(){ c; } public int valor(){ return c; }
Programacin Concurrente
Exclusin mutua
public class Contador{ private int c=0; public Contador(int valorInicial){ c=valorInicial; } public synchronized void incrementar(){ c++; } public synchronized void decrementar(){ c; } public synchronized int valor(){ return c; }
Programacin Concurrente
Mtodos sincronizados
Se marcan a travs de la palabra reservada synchronized Se garantiza la exclusin mutua en la ejecucin de mtodos sincronizados de un mismo objeto Basado en la adquisicin y liberacin de un cierre intrnseco de cada objeto en Java El mbito sincronizado puede ser menor que el de un mtodo instrucciones sincronizadas
public void addName(String name){ synchronized(this){ lastName =name; nameCount++; } nameList.add(name); }
Programacin Concurrente
Monitores en Java
Todos los objetos en Java son un monitor
Tienen una nica variable condicin implcita Las esperas se realizan invocando el mtodo wait() Los anuncios se realizan invocando a los mtodos notify() o notifyAll() wait(), notify() y notifyAll() deben ejecutarse en exclusin mutua (en mtodos sincronizados)
Lanzan IllegalMonitorStateException en caso contrario
Programacin Concurrente
Monitores en Java
wait() bloquea al hilo que lo invoca
hasta que el hilo sea interrumpido hasta que otro hilo notifique que algn evento ha ocurrido (con notify() o notifyAll())
Aunque no necesariamente el evento que espera el hilo que invoc wait() Tambin puede ocurrir que la condicin que esperara haya dejado de cumplirse if (!puedoSeguir){ wait(); } while (!puedoSeguir){ wait(); }
Monitores en Java
t.notifyAll() desbloquea todos los hilos que se hayan bloqueado al invocar el mtodo wait() del objeto t t.notify() desbloquea slo a uno de los hilos que se hayan bloqueado al invocar wait() del objeto t
No se puede especificar cul
Programacin Concurrente
Programacin Concurrente
Programacin Concurrente
Concurrencia en Java
Hilos de ejecucin
Clase Thread e interfaz Runnable Pausas Interrupciones Citas
Monitores
Exclusin mutua Mtodos wait(), notify() y notifyAll()
Cierres de exclusin mutua Barreras, semforos Colecciones (vectores, conjuntos, tablas, colas) concurrentes Variables atmicas
Programacin Concurrente
Programacin Concurrente
Colecciones concurrentes
BlockingQueue define una estructura FIFO que se bloquea (o espera un tiempo mximo determinado) cuando se intenta aadir un elemento a una cola llena o retirar uno de una cola vaca ConcurrentMap define una tabla hash con operaciones atmicas
Programacin Concurrente
Variables atmicas
java.util.concurrent.atomic Conjunto de clases que permiten realizar operaciones atmicas con variables de tipos bsicos
AtomicBoolean AtomicInteger AtomicIntegerArray AtomicLong AtomicLongArray
Programacin Concurrente
Variables atmicas
AtomicInteger
addAndGet compareAndSet decrementAndGet getAndAdd getAndDecrement getAndIncrement getAndSet incrementAndGet intValue lazySet set
M. Latre 33 Universidad de Zaragoza
Programacin Concurrente
Programacin Concurrente
Programacin Concurrente