11.05.2013 Views

Java Threads (Hilos en Java) - Universidad de Salamanca

Java Threads (Hilos en Java) - Universidad de Salamanca

Java Threads (Hilos en Java) - Universidad de Salamanca

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Java</strong> <strong>Threads</strong> (<strong>Hilos</strong> <strong>en</strong> <strong>Java</strong>)<br />

Thread #0, tick = 200000<br />

Thread #0, tick = 250000<br />

Thread #0, tick = 300000<br />

Thread #0, tick = 350000<br />

Thread #0, tick = 400000<br />

Thread #1, tick = 50000<br />

Thread #1, tick = 100000<br />

Thread #1, tick = 150000<br />

Thread #1, tick = 200000<br />

Thread #1, tick = 250000<br />

Thread #1, tick = 300000<br />

Thread #1, tick = 350000<br />

Thread #1, tick = 400000<br />

Nota : No todos los sistemas aceptan el tiempo compartido, por lo tanto los programas <strong>en</strong><br />

<strong>Java</strong> no <strong>de</strong>berían ser relativos al tiempo compartido ya que podrían producirse resultados<br />

distintos para sistemas difer<strong>en</strong>tes.<br />

7. Sincronización<br />

El problema <strong>de</strong> la sincronización <strong>de</strong> hilos ti<strong>en</strong>e lugar cuando varios hilos int<strong>en</strong>tan acce<strong>de</strong>r al<br />

mismo recurso o dato. A la hora <strong>de</strong> acce<strong>de</strong>r a datos comunes, los hilos necesitan establecer<br />

cierto ord<strong>en</strong>, por ejemplo <strong>en</strong> el caso <strong>de</strong>l productor consumidor. Para asegurarse <strong>de</strong> que hilos<br />

concurr<strong>en</strong>tes no se estorban y operan correctam<strong>en</strong>te con datos (o recursos) compartidos, un<br />

sistema estable previ<strong>en</strong>e la inanición y el punto muerto o interbloqueo. La inanición ti<strong>en</strong>e lugar<br />

cuando uno o más hilos están bloqueados al int<strong>en</strong>tar conseguir acceso a un recurso compartido<br />

<strong>de</strong> ocurr<strong>en</strong>cias limitadas. El interbloqueo es la última fase <strong>de</strong> la inanición; ocurre cuando uno o<br />

más hilos están esperando una condición que no pue<strong>de</strong> ser satisfecha. Esto ocurre muy<br />

frecu<strong>en</strong>tem<strong>en</strong>te cuando dos o más hilos están esperando a que el otro u otros se <strong>de</strong>sbloquee,<br />

respectivam<strong>en</strong>te.<br />

A continuación se pres<strong>en</strong>ta un ejemplo, el problema <strong>de</strong>l Productor/Consumidor, con la<br />

int<strong>en</strong>ción <strong>de</strong> explicar <strong>de</strong> una forma más práctica el concepto y las situciones <strong>de</strong> sincronización<br />

<strong>de</strong> hilos.<br />

7.1. Ejemplo: problema <strong>de</strong>l productor-consumidor<br />

El productor g<strong>en</strong>era un <strong>en</strong>tero <strong>en</strong>tre 0 y 9 (inclusive), lo almac<strong>en</strong>a <strong>en</strong> un objeto "CubbyHole", e<br />

imprime el número g<strong>en</strong>erado. Para hacer más interesante el problema <strong>de</strong> la sincronización, el<br />

productor duerme durante un tiempo aleatorio <strong>en</strong>tre 0 y 100 milisegundos antes <strong>de</strong> repetir el<br />

ciclo <strong>de</strong> g<strong>en</strong>eración <strong>de</strong> números.<br />

class Productor ext<strong>en</strong>ds Thread {<br />

private CubbyHole cubbyhole;<br />

private int numero;<br />

public Productor(CubbyHole c, int numero) {<br />

cubbyhole = c;<br />

this.numero = numero;<br />

18

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!