Java - Hilos Sincronizados
Existen varias
formas en las que podemos sincronizar los hilos en Java y poder logar que los
datos generados estén correctos. La idea de sincronizar los hilos es que estos
puedan utilizar los recursos compartidos de una forma ordenada y correcta.
Para este
ejemplo utilizaremos ReentrantLock como objeto para bloquear los accesos ordenados
de los hilos.
Lo que
vamos hacer es un ejemplo muy simple que nos permite ejecutar dos hilos. Cada uno
de los hilos va a restar números de una sola variable. Si esto lo hacemos sin
la sincronización los resultados pueden ser erróneos. Por lo que vamos a sincronizarlos.
Lo primero
que debemos hacer es crear un proyecto. Dentro de este proyecto de java vamos a
crear una clase llamada Utils. Esta clase solo va a tener una variable estática
que nos permite almacenar en momería un monto. El monto que utilizaremos es de
100.
Ahora lo
que tenemos que agregar es una clase llamada SumThread. Dentro de esta clase agregaremos
el código de bloqueo y la operación para restar las cantidades a la variable
total.
Dentro del método
run creamos un ciclo que recorre un arreglo llamado numbers, el cual contiene 3
números que son los que se restaran al valor total de 100.
Como podemos
observar en el método run antes de hacer cualquier operación sobre la variable
que deseamos proteger con la sincronización hacemos uso de un objeto llamado
lock. Este objeto lock lo inicializamos en el Main y lo pasamos por medio del constructor
de la clase. Este objeto cuanta con un método llamado lock que nos permite bloquear
los recursos hasta que ya no estén en uso. (esto lo podemos ver en la línea 23)
El objeto
lock es declarado en la línea 9 y para que este pueda funcionar correctamente
lo tenemos que asignar en la línea 14 dentro del constructor de la clase usando
el objeto lock que viene de la línea 12.
Todo el código
que se encuentra entre la línea 24 y 31 son las operaciones que deseamos
realizar sobre la variable total.
Cuando terminamos
de utilizar la variable estática total debemos liberar el recurso utilizando el
método unlock. De esta manera podemos permitir otros hilos utilizar esta
variable. (Esto lo podemos ver en la línea
34)
Ahora en la
clase Main vamos a poner a correr nuestra aplicación. Lo primero es crear el objeto
lock que vamos a pasar a los hilos (Esto está en la línea 15). Este objeto es
de tipo ReentrantLock que viene del paquete concurrent de java (esto lo podemos
ver en la línea 3).
Cada vez
que inicializamos un hilo debemos pasar el objeto lock como podemos observar en
la línea 19 y 20.
Ejemplo
Etiquetas: Java, Programación, Runnable, Sync, Thread
0 comentarios:
Publicar un comentario
Suscribirse a Enviar comentarios [Atom]
<< Inicio