Concurrencia - PowerPoint PPT Presentation

1 / 43
About This Presentation
Title:

Concurrencia

Description:

Concurrencia En el mundo real pasan muchas cosas a la vez Con varias computadoras se pueden ejecutar m ltiples programas Con una sola computadora se pueden simular ... – PowerPoint PPT presentation

Number of Views:27
Avg rating:3.0/5.0
Slides: 44
Provided by: EstelaDA7
Category:

less

Transcript and Presenter's Notes

Title: Concurrencia


1
Concurrencia
  • En el mundo real pasan muchas cosas a la vez
  • Con varias computadoras se pueden ejecutar
    múltiples programas
  • Con una sola computadora se pueden simular la
    ejecución paralela de varias actividades
  • múltiples hilos de ejecución comparten el uso de
    un procesador

2
Concurrencia
  • Java soporta la ejecución paralela de varios
    threads (hilos)
  • múltiples threads ejecutándose en una máquina
    comparten recursos (memoria)
  • múltiples threads ejecutándose en varias máquinas
    necesitan capacidades de comunicación

3
Programación concurrente OO
  • La concurrencia es natural en OO
  • Ada y Simula 67 ya soportaban concurrencia
  • Java es único entre los lenguajes de propósitos
    generales que pone primitivas de concurrencia a
    disposición del programador

4
Aplicaciones concurrentes
  • Descargas de grandes archivos de la WWW
  • Recolección de basura de Java (garbage colector)

5
Creacion de threads
  • Crear un thread
  • Configurarlo nombre, prioridad,etc.
  • Ejecutarlo
  • invocar el método start,
  • éste invoca al método run
  • cuando run devuelve el control el thread ha
    terminado

6
Creacion de threads
  • Un thread se puede crear
  • extendiendo una clase de Thread
  • implementando la interface Runnable

7
La clase Thread
  • Un hilo de ejecución de Java (Java.lang)
  • Métodos
  • run() activa el thread
  • start () activa run y vuelve al llamante
  • join () espera por la terminación ( timeout
    opcional)
  • interrupt () sale de un wait, sleep o join
  • isInterrupted ()
  • yield ()
  • stop (), suspend (), resume ()

8
La clase Thread
  • Métodos estáticos
  • sleep (milisegundos)
  • currentThread ()
  • Métodos de la clase Object que controlan la
    suspensión del Thread actual
  • wait() (equivale a 0 milisegundos)
  • wait (milisegundos)
  • notify () notifyAll()

9
Constructores de Thread
  • public Thread ( String threadName)
  • construye un thread cuyo nombre es threadName
  • public Thread ()
  • construye un thread cuyo nombre es Thread
    concatenado con un dígito (Thread1, Thread2)

10
Inicio de la ejecución de un hilo
  • Se invoca al método start
  • Este invoca a run y devuelve el control al
    llamante
  • El invocador se ejecuta en paralelo con el thread

11
Estados de hilos ciclo de vida
start
Completar E/S
Asignar procesador
Termina quantum
notify notifyAll
Solicitud E/S
wait
sleep
suspend
suspendido
stop completar
Resume
Expìra sleep
12
Sincronización
  • Solo un thread por vez puede acceder a un objeto

bloquea
Thread
Thread
13
Métodos sincronizados
  • Los métodos que tengan que acceder al mismo
    objeto se deben sincronizar para lograr el
    bloqueo.
  • La ejecución de dos métodos sincronizados es
    mutuamente excluyente.

14
Métodos sincronizados
  • class Account
  • private double balance
  • public Account ( double inicial)
  • balanceinicial
  • public synchronized double getBalance
  • return balance
  • public synchronized void deposito (double amount)
    balance amount

15
Métodos sincronizados
  • Métodos sincronizados

Instancia (bloquean objetos)
Clase (bloquean clases)
16
Métodos synchonized anulados
  • Si una clase extendida anula un método
    synchronized, el nuevo método puede o no ser
    synchronized.
  • El método de la superclase continúa siendo
    synchronized.

17
Sentencias synchronized
  • Permite ejecutar código sincronizado sin invocar
    un método sincronizado

bloqueo
sentencia
18
Sentencias synchronized
  • Forma general
  • synchronized (expresión)
  • sentencia
  • Cuando la sincronización se usa en muy pocos
    lugares. Son más convenientes los métodos
    sincronizados

Objeto a bloquear
19
Wait y notify
  • Sirven para comunicar los threads entre sí
  • synchronized void cuandoCondicion ( )
  • while ( ! condicion )
  • wait ( )
  • .hacer lo que sea necesario cuando la condicion
    sea cierta

20
Wait y notify
  • synchronized void cambiaCondicion ( )
  • .cambiar algún valor usado en condición
  • notify ( ) // notifyAll ( )

21
Wait y notify
  • Para que el contenido del objeto sea estable todo
    debe ocurrir en método synchronized.
  • Cuando se suspende el thread libera en forma
    atómica el bloqueo del objeto
  • La prueba de la condición debe estar siempre en
    un bucle

22
Wait
  • public final void wait (long timeout) throws
    InterruptedException
  • public final void wait (long timeout, int nanos)
    throws InterruptedException
  • public final void wait () throws
    InterruptedException

23
Notify
  • public final notify ( )
  • public final notifyAll ( )

24
Prioridades De Los threads
  • Todo thread en Java tiene una prioridad en el
    intervalo
  • Thread.MIN_PRIORITY (constante que vale 1)
  • Thread.MAX_PRIORITY (constante que vale 10)
  • Thread.NORM_PRIORITY (constante que vale 5)

25
Manejo de la Concurrencia
  • Ejecución de un hilo hasta que termine o se
    bloquee (actividades de E/S)
  • Ejecución de un hilo por asignación de quantum
    (cantidad de tiempo)

26
Planificación de threads
  • Mantener un hilo de máxima prioridad ejecutándose
    en todo momento, de acuerdo a la forma en que
    maneje la concurrencia.
  • La aparición de hilos de alta prioridad puede
    posponer indefinidamente la ejecución de hilos de
    prioridades ba.jas

27
Planificación de threads
  • La prioridad de un Thread se puede ajustar con el
    método
  • setPriority ( int prioridad )
  • 1lt prioridad lt 10
  • La prioridad de un Thread se puede obtener con el
    método
  • getPriority ( )

28
Planificación de threads
  • Un hilo puede llamar al método yield para dar
    oportunidad a otros hilos de su misma prioridad a
    ejecutarse, esto se usa siempre que el manejo de
    la concurrencia no este basado en quantum.
  • public static void yield ( )

29
Planificación de threads
  • Un hilo se ejecuta hasta que ocurre alguna de las
    situaciones siguientes
  • muere.
  • se bloquea para entrada/salida.
  • Invoca a sleep.
  • invoca a yield.
  • es desalojado por un hilo de mayor prioridad.
  • hasta que expira su quantum.

30
Planificación de threads
  • Un hilo con prioridad más alta que el que se está
    ejecutando, puede desalojar a éste si
  • si invoca a resume.
  • si se acaba el período de sleep.
  • si se completa la E/S por la cual se bloqueo.
  • si se invoca notify o notifyAll para un hilo que
    había invocado wait.

31
Sincronización de hilos
  • Java usa monitores para la sincronización de
    hilos.
  • Todo objeto con métodos synchronized es un
    monitor.
  • El monitor sólo permite a un hilo por vez
    ejecutar un método synchronized sobre el objeto.

32
Sincronización de hilos
  • Ejemplo productor / consumidor
  • Dos hilos comparten una celda de memoria, uno
    coloca datos en la celda y el otro consume esos
    datos.
  • Sin sincronización es posible que el productor
    coloque datos antes que el consumidor los
    consuma, o que el consumidor duplique datos si
    consume datos antes que el productor produzca un
    nuevo dato.

33
Sincronización de hilos
  • Ejemplo

34
Interface Runnable
  • Otra forma de crear un thread es implementando la
    interface runnable, que nos provee el metodo run,
    para implementarlo en el thread.

35
Interface Runnable
  • Ejemplo

36
Grupos de hilos
  • Permite identificar varios hilos como
    pertenecientes a grupo de hilos.
  • La clase ThreadGroup contiene los métodos
    necesarios para crear y manipular grupos de
    hilos.
  • El grupo tiene un nombre único.
  • Los grupos se pueden tratar colectivamente.

37
Grupos de hilos
  • Tiene dos constructores
  • public ThreadGroup (String cadenanombre)
  • construye un ThreadGroup cuyo nombre es
    cadenanombre
  • public ThreadGroup ( ThreadGroup padre, String
    cadenanombre)
  • construye un ThreadGroup hijo de padre, llamado
    cadenanombre

38
Grupos de hilos
  • La clase Thread tiene tres constructores que
    permite crear un Thread y asociarlo a un grupo
  • public Thread (ThreadGrroup threadGroup, String
    nombre)
  • public Thread (ThreadGrroup threadGroup, Runnable
    objetoEjecutable)
  • public Thread (ThreadGrroup threadGroup, Runnable
    objetoEjecutable, String cadena)

39
Métodos de ThreadGroup
  • public int activeCount() public int
    activeGroupCount()
  • public final void checkAccess() public final
    void destroy()

40
Métodos de ThreadGroup
  • public int enumerate(Thread list)
  • public int enumerate(Thread list, boolean
    recurse)
  • public int enumerate(ThreadGroup list)
  • public int enumerate(ThreadGroup list, boolean
    recurse)

41
Métodos de ThreadGroup
  • public final int getMaxPriority()
  • public final String getName()
  • public final ThreadGroup getParent()
  • public final boolean isDaemon()
  • public void list()
  • public final boolean parentOf(ThreadGroup g)

42
Métodos de ThreadGroup
  • public final void resume()
  • public final void setDaemon(boolean daemon)
  • public final void setMaxPriority(int pri)
  • public final void stop()
  • public final void suspend()
  • public String toString()

43
Métodos de ThreadGroup
  • public void uncaughtException(Thread t,
    Throwable e)
Write a Comment
User Comments (0)
About PowerShow.com