Java Concurrencia : Semaforos (Semaphore)
Hola chavos, en esta ocasión tocare el tema de los semáforos en Java, así es Java cuenta con una clase llamada semaphore, la cual es usada para sincronizar y calendarizar la interacción entre múltiples hilos.
Para explicar esto mejor pongamos un ejemplo sencillo, están tratando de descargar múltiples imagenes de Internet, pero si intentamos descargar todas a la vez, nuestro programa truena! Es en ese momento que decidimos utilizar un semáforo para limitar el cargar y asegurar el desempeño de nuestra aplicacion, es decir, limitamos el numero de descargas a 5 (es un numero que se me vino a la mente), para que nuestra aplicacion no truene. Estas 5 imagenes tendrán el semáforo en verde, mientras que las demás estarán en rojo, prohibiendo así su descarga hasta que una se descargue y permita el cambio en otro semáforo:
Existen 2 tipos de semáforos en Java:
Para explicar esto mejor pongamos un ejemplo sencillo, están tratando de descargar múltiples imagenes de Internet, pero si intentamos descargar todas a la vez, nuestro programa truena! Es en ese momento que decidimos utilizar un semáforo para limitar el cargar y asegurar el desempeño de nuestra aplicacion, es decir, limitamos el numero de descargas a 5 (es un numero que se me vino a la mente), para que nuestra aplicacion no truene. Estas 5 imagenes tendrán el semáforo en verde, mientras que las demás estarán en rojo, prohibiendo así su descarga hasta que una se descargue y permita el cambio en otro semáforo:
Existen 2 tipos de semáforos en Java:
- El semáforo de conteo, el cual permite un numero arbitrario de hilos ejecutarse a la vez y
- El semáforo Binario, el cual solo permite o 1 o 0, esto quiere decir que o pasa 1 o no pasa nadie
- Poner un semáforo en "verde" y nunca volverlo a colocar en "rojo"
- Y por el lado contrario, poner el semáforo en "rojo" y nunca cambiarlo a "verde"
g
ReplyDeleteEL código es muy bueno y funciona, pero si estuviera comentado seria más entendible, de todas formas muchas gracias me sirvió mucho
ReplyDelete