javaThread

Páginas: 7 (1566 palabras) Publicado: 21 de septiembre de 2015
+

Java Threads
Sistemas Distribuidos
Rodrigo Santamaría

+ Java Threads
• 
• 
• 
• 

Hilos
Sincronización
Ejercicios
FAQ

2

+

3

Hilos
l 

Un hilo (Thread) es un proceso en ejecución dentro de un
programa
java

l 

main
Thread t
t.start()

l 

run()

l 

l 

finalización
return

Puede haber varios hilos en
ejecución simultánea
Los hilos implementan prioridad y
mecanismos desincronización
La finalización depende del hilo
(Thread.suspend, stop están
depreciados)
Cualquier clase se puede hacer hilo
l 

extends Thread

l 

implements Runnable

+

4

Hilos
Thread

public class PingPong extends Thread
{
private String word;
public PingPong(String s) {word=s;}

l 



Clase Thread
l 

public void run()
{
for (int i=0;i<3000;i++)
{System.out.print(word);System.out.flush();}
}

l 

start() → run()

l 

stop(), suspend()

l 

setPriority()

l 

sleep()

l 

Hereda de Object



public static void main(String[] args)
{
Thread tP=new PingPong("P");
Thread tp=new PingPong("p");
//tP.setPriority(Thread.MAX_PRIORITY);
//tp.setPriority(Thread.MIN_PRIORITY);
tp.start();
tP.start();
}
}

Implementa Runnable

l 

wait(), notify()http://download.oracle.com/javase/tutorial/essential/concurrency

+

5

Hilos
Prioridades
n 

No hay control por defecto del orden de ejecución de los hilos
n 

En el ejemplo anterior de dos hilos jugando al ping pong, tenemos
una ejecución como esta:
ppppppppPPPPPPPPppppppPPPPPP
Podemos controlar la ejecución mediante prioridades con
setPriority()
n 

n 

n 

P. ej., si damos a tP prioridad máxima(Thread.MAX_PRIORITY) y
a tp prioridad mínima, tendremos (aunque no asegurado)
n 

n 

PPPPPPPPPPPPPPpppppppppppppp

Sin embargo, la prioridad no nos permite un control fino de la
ejecución, ni nos asegura un orden concreto
n 

Necesidad de mecanismos de sincronización

+

6

Hilos
Suspensión
n 

n 

Se puede interrumpir la ejecución de un hilo temporalmente
n 

Thread.sleep(long millis)

n 

Útil parasimular tiempos de procesamiento o timeouts

La suspensión indefinida (Thread.suspend) y la finalización
(Tread.stop) están en desuso (deprecated)
n 

La parada indefinida o terminante de un hilo sólo debe estar
controlada por dicho hilo

+ Java Threads
• 
• 
• 
• 

Hilos
Sincronización
Ejercicios
FAQ

7

+

8

Sincronización
l 

l 

Los hilos se comunican generalmente a través de campos y
losobjetos que tienen esos campos
l 

Es una forma de comunicación eficiente

l 

Pero puede plantear errores de interferencias entre hilos

La sincronización es la herramienta para evitar este tipo de
problemas, definiendo órdenes estrictos de ejecución

+

9

Sincronización
Interferencia entre hilos
class Counter
{
private int c = 0;
public void increment() { c++; }
public void decrement() {c--; }
public int value() { return c; }
}


c++ está compuesto de:
1.  Obtener el valor de c
2.  Incrementar c en 1
3.  Almacenar el valor de c
c-- está compuesto de:
1.  Obtener el valor de c
2.  Decrementar c en 1
3.  Almacenar el valor de c

Dos hilos A y B pueden estropearlo!:
Hilo A: recuperar c (0)
Hilo B: recuperar c (0)
Hilo A: incrementar c (1)
Hilo B: decrementar c (-1)
Hilo A:almacenar c (1)


Hilo B: almacenar c (-1)

+

10

Sincronización
Efectos
n 

Evita que dos invocaciones de métodos sincronizados del
mismo objeto se mezclen.
n 

n 

Cuando un hilo ejecuta un método sincronizado de un objeto,
todos los hilos que invoquen métodos sincronizados del objeto se
bloquearán hasta que el primer hilo termine con el objeto.

Al terminar un método sincronizado, se garantizaque todos
los hilos verán los cambios realizados sobre el objeto.

+

11

Sincronización
Bloqueo intrínseco
n 

Cuando un hilo invoca un método sincronizado, adquiere el
bloqueo intrínseco del objeto correspondiente.

n 

Si invoca un método estático sincronizado, adquiere el
bloqueo intrínseco de la clase, independiente de los de sus
objetos

+

12

Sincronización
Sincronización de...
Leer documento completo

Regístrate para leer el documento completo.

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS