Prefacio:
La prueba la semana pasada aumentó un error al módulo desarrollado por los colegas de desarrollo, y todavía fue una coincidencia.
Después de verificar cuidadosamente el código, descubrí que la múltiples subprocesos está habilitado en el negocio, y 2 hilos se ejecutan al mismo tiempo, pero los dos hilos recién iniciados deben asegurarse de que uno esté completado y el otro continúe ejecutándose para eliminar el error.
¿Cuándo usarlo?
La lectura múltiple se usa en muchos lugares, pero si queremos comenzar otro hilo después de que se complete un hilo específico, CountdownLatch puede ser útil.
¿Cómo usarlo?
Echemos un vistazo al código múltiple ordinario:
código de paquete; public class myThread extiende el hilo {public static void main (string [] args) {mythread th = new myThread (); Hilo t1 = nuevo hilo (th, "mythread"); t1.start (); System.out.println (Thread.CurrentThread (). GetName ()); } public void run () {myThread1 th2 = new MyThread1 (); Hilo t2 = nuevo hilo (Th2, "myThread1"); t2.start (); System.out.println (this.CurrentThread (). GetName ()); } class MyThread1 extiende el hilo {public void run () {try {Thread.sleep (1000); } Catch (InterruptedException e) {// TODO Auto Generado Bloque E.PrintStackTrace (); } System.out.println (this.CurrentThread (). GetName ()); }}}El código es el anterior. Primero, use Mythread para heredar la clase de hilo, y luego escriba otra clase Mythread1 dentro de la clase Mythread, que también hereda la clase de hilo, y deja que duerma por 1 segundo en el método Ejecutar. De esta manera, el código se imprimirá:
Desde el orden de salida anterior, podemos ver que el hilo principal se inicia primero, y luego se inicia el hilo mythread. En el hilo Mythread, se inicia el hilo MyThread1. Sin embargo, debido a que el hilo Mythread1 durmió por 1 segundo, simuló el procesamiento de negocios posteriores, por lo que sería un poco más tarde de lo que se completó MyThread.
Ahora, agregue CountdownLatch al código y deje que MyThread1 se ejecute primero, y luego deje que MyThread continúe ejecutándose.
Código de paquete; import java.util.concurrent.countdownLatch; public class myThread extiende el hilo {CountDownLatch CountDownLatch = new CountdownLatch (1); public static void main (string [] args) {mythread th = new myThread (); Hilo t1 = nuevo hilo (th, "mythread"); t1.start (); System.out.println (Thread.CurrentThread (). GetName ()); } public void run () {myThread1 th2 = new MyThread1 (); Hilo t2 = nuevo hilo (Th2, "myThread1"); t2.start (); intente {CountDownLatch.AWAIT (); } catch (InterruptedException e) {E.PrintStackTrace (); } System.out.println (this.CurrentThread (). GetName ()); } class MyThread1 extiende el hilo {public void run () {try {Thread.sleep (1000); } catch (InterruptedException e) {E.PrintStackTrace (); } System.out.println (this.CurrentThread (). GetName ()); CountdownLatch.CountDown (); }}}El método de escritura de código se muestra arriba, dividido aproximadamente en tres pasos
1. El primer parámetro de objeto CountdownLatch establecido en 1 (entiendo personalmente que esto es como una nueva matriz. Cuando se borra la matriz, el hilo interrumpido puede continuar ejecutándose)
2. Llame a CountdownLatch.AWAIT () en la clase Mythread; para dejar de ejecutar el hilo actual.
3. Llame al método CountdownLatch.CountDown () en la clase MyThread1. Cuando se ejecuta todo MyThread1 y finalmente se llama el método, la función es borrar la "matriz" que mencioné.
Consulte los resultados de la impresión de la salida
Los resultados son los que se muestran en la figura anterior, que están en línea con los resultados esperados.
Finalmente, hablemos sobre CountdownLatch CountdownLatch = New CountdownLatch (1). Establezca 1 en esta área, por lo que debe llamar a CountdownLatch.CountDown () una vez para restar 1.
Si es otro número, se debe llamar al número correspondiente de veces, de lo contrario, el hilo llamado a CountdownLatch.await () no se ejecutará.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.