ejemplo java multithreading countdownlatch

ejemplo - countdownlatch java 8



¿Cuál es la diferencia entre join y CountDownLatch? (5)

Al esperar a que finalicen otros subprocesos, podemos usar join o CountdownLatch . ¿Cuáles son los pros y los contras de usar cualquiera de estos dos mecanismos?


Otra diferencia es que después de join() , el hilo puede desbloquearse solo cuando el hilo unido ha finalizado su ejecución, mientras que en CountDownLatch un hilo puede disminuir el recuento en cualquier momento al completar el hilo o en función de cualquier condición.
De esta manera podemos obtener un mejor control sobre el desbloqueo del hilo en lugar de depender únicamente de la finalización del hilo unido.


Solo puedes usar Thread.join si estás manejando los hilos por ti mismo. La mayoría de las personas optan por no lidiar directamente con la minucia del manejo de subprocesos, y en su lugar usan un ExecutorService para manejarlo por ellos. ExecutorService s no revela directamente cómo se ejecutan las tareas, por lo que tendría que usar CountDownLatch : (Suponiendo que no quiere simplemente shutdown todo el servicio, es decir).

ExecutorService service = Executors.newFixedThreadPool(5); final CountDownLatch latch = new CountDownLatch(5); for(int x = 0; x < 5; x++) { service.submit(new Runnable() { public void run() { // do something latch.countDown(); } }); } latch.await();


Un CountdownLatch está orientado a tareas, es sin hilos. Se puede enviar una pila completa de conjuntos de tareas no relacionadas a un threadPool y CountdownLatch se asegurará de que cada conjunto notifique al originador de la finalización. Join () es una aberración molesta que enlaza las tareas a los hilos y, en pocas palabras, nunca debería haber ingresado el idioma en primer lugar. Lamentablemente, una gran y humeante pila de tutoriales de hilos menciona Join () en la primera página, introduciendo así hilos a los novatos como un generador de interbloqueo y generando hilos-funk :(


join () está esperando a que termine otro hilo mientras CountDownLatch está diseñado para otro propósito. Si usa CountDownLatch, no tiene que tener una referencia de subprocesos que está esperando como tenemos que hacerlo usando join (). Supongamos que desea iniciar un juego cuando al menos 2 jugadores deberían estar disponibles. Puedes usar countdownlatch en este caso. Pero no puede lograr esto utilizando join simplemente porque no tiene otro hilo (reproductor en este caso) en el que pueda escribir join ().


CountdownLatch permite cambiar la implementación del Elemento para enviarlo a un servicio Executor en lugar de usar Threads directamente.

La clase CountDownLatch nos permite coordinar el inicio y la detención de subprocesos. Los usos típicos son los siguientes:

  1. Podemos hacer que varios hilos comiencen al mismo tiempo;
  2. Podemos esperar a que finalicen varios subprocesos (mientras que, por ejemplo, el método Thread.join() solo le permite esperar un solo subproceso).

Puede echar un vistazo a esto -> http://javahowto.blogspot.com/2011/08/when-to-join-threads-with.html

Y este -> el método latch.await () de CountDownLatch vs Thread.join ()