JavaHilos

Páginas: 13 (3208 palabras) Publicado: 15 de marzo de 2015
Hilos en Java

Rodrigo Santamaría

Hilos


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



main

están depreciados)

Thread t
t.start()


run()



finalización
return

La finalización depende del
hilo (Thread.suspend, stop
Los hilos implementan
prioridad y mecanismos de
sincronización
Cualquier clase se puede
hacer hilo


implements Runnable

Hilos
public classPingPong extends Thread
{
private String word;
public PingPong(String s) {word=s;}
public void run()
{
for (int i=0;i<3000;i++)
{System.out.print(word);
System.out.flush();}
}
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();
}
}



Clase Thread
●Implementa Runnable



start() → run()



stop(), suspend()



setPriority()



sleep()



Hereda de Object


wait(), notify()

http://download.oracle.com/javase/tutorial/essential/concurrency

Sincronización


Los hilos se comunican generalmente a través
de campos y los objetos que tienen esos
campos





Es una forma de comunicación eficiente
Pero puede plantear errores deinterferencias entre
hilos

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

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

}
c++
1.
2.
3.
c++
4.
5.
6.

está compuesto de:
Obtener el valor de c
Incrementar c en 1
Almacenar el valorde c
está compuesto de:
Obtener el valor de c
Decrementar c en 1
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)

Métodos sincronizados


Convertir un método en sincronizado tiene dos
efectos:




Evita quedos invocaciones de métodos
sincronizados del mismo objeto se mezclen.
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 garantiza
que todos los hilos verán los cambios realizados
sobre el objeto.

Bloqueo intrínseco


●Cuando un hilo invoca un método sincronizado,
adquiere el bloqueo intrínseco del objeto
correspondiente.
Si invoca un método estático sincronizado,
adquiere el bloqueo intrínseco de la clase,
independiente de los de sus objetos

Métodos sincronizados
Hilo 1

objeto
Hilo 3

métodos
...

Hilo 2

método
sincronizado1

método
sincronizado2
...
métodos

bloqueo
intrínseco
del objeto

Métodossincronizados
class Counter
{
private int c = 0;
public synchronized void increment() { c++; }
public synchronized void decrement() { c--; }
public int value() { return c; }

}

Código sincronizado


En vez de sincronizar todo un método podemos
sincronizar una porción de código


Debemos especificar sobre qué quieren el bloqueo
intrínseco



public void addName(String name)
{
synchronized(this)
{lastName = name;
nameCount++;
}
nameList.add(name);
}

Código sincronizado
public class MsLunch
{
private long c1 = 0;
private long c2 = 0;
private Object lock1 = new Object();
private Object lock2 = new Object();
public void inc1()
{
synchronized(lock1)
{
c1++;
}
}
public void inc2()
{
synchronized(lock2)
{
c2++;
}
}
}





Grado más fino de
sincronización
Si la sincronización
es sobre un atributoestático, se bloquea
la clase.

Problemas con múltiples procesos


Espera ocupada: un proceso espera por un
recurso, pero la espera consume CPU








while(!recurso)

;

wait()

Interbloqueo (deadlock): varios procesos
compiten por los mismos recursos pero
ninguno los consigue
Inanición: un proceso nunca obtiene los
recursos que solicita, aunque no esté
interbloqueado
Autobloqueo: un...
Leer documento completo

Regístrate para leer el documento completo.

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS