Предисловие:
Тест на прошлой неделе поднял ошибку для модуля, разработанного коллегами по разработке, и это все еще было совпадением.
После тщательной проверки кода я обнаружил, что в бизнесе включено многопоточное, а 2 потока работают одновременно, но вновь начавшие два потока должны убедиться, что один будет завершен, а другая продолжает работать, чтобы устранить ошибку.
Когда его использовать?
Многопользовательский аппарат используется во многих местах, но если мы хотим запустить другой поток после завершения определенного потока, Countdownlatch может пригодиться.
Как его использовать?
Давайте посмотрим на обычный многопоточный код:
Код пакета; открытый класс Mythread Extends Thread {public static void main (string [] args) {mythread th = new Mythread (); Потока T1 = новый поток (TH, "Mythread"); t1.start (); System.out.println (think.currentThread (). GetName ()); } public void run () {mythread1 th2 = new mythread1 (); Потока T2 = новый поток (Th2, "mythread1"); t2.start (); System.out.println (this.currentthread (). GetName ()); } класс mythread1 extends thread {public void run () {try {thread.sleep (1000); } catch (прерванная экспрессия e) {// todo автоматически сгенерированный блок e.printstacktrace (); } System.out.println (this.currentthread (). GetName ()); }}}Код, как указано выше. Сначала используйте Mythread, чтобы наследовать класс потоков, а затем напишите еще один класс Mythread1 в классе Mythread, который также наследует класс потоков, и позволяет ему спать в течение 1 секунды в методе запуска. Таким образом, код будет напечатан:
Из приведенного выше порядок вывода мы видим, что основной поток сначала запускается, а затем запускается поток Mythread. В ветке Mythread поток Mythread1 запускается. Однако, поскольку нить Mythread1 спала в течение 1 секунды, она смоделировала обработку последующего бизнеса, так что это было бы немного позже, чем Mythread был завершен.
Теперь добавьте Countdownlatch в код, и позвольте Mythread1 работать сначала, а затем позвольте Mythread продолжать работать.
Код пакета; import java.util.concurrent.countdownlatch; публичный класс Mythread extends Thread {countdownlatch countdownlatch = new Countdownlatch (1); public static void main (string [] args) {mythread th = new Mythread (); Потока T1 = новый поток (TH, "Mythread"); t1.start (); System.out.println (think.currentThread (). GetName ()); } public void run () {mythread1 th2 = new mythread1 (); Потока T2 = новый поток (Th2, "mythread1"); t2.start (); try {countdownlatch.await (); } catch (прерванное искусство e) {e.printstacktrace (); } System.out.println (this.currentthread (). GetName ()); } класс mythread1 extends thread {public void run () {try {thread.sleep (1000); } catch (прерванное искусство e) {e.printstacktrace (); } System.out.println (this.currentthread (). GetName ()); countdownlatch.countdown (); }}}Метод написания кода показан выше, примерно разделен на три шага
1. Давайте сначала новый параметр объекта countdownlatch, установивший 1 (я лично понимаю, что это похоже на новый массив. Когда массив очищен, прерванная поток может продолжать работать)
2. Позвоните Countdownlatch.await () в классе Mythread; Чтобы прекратить запуск текущего потока.
3. Позвоните в метод countdownlatch.countdown () в классе Mythread1. Когда все Mythread1 выполняется, и метод наконец -то вызывается, функция состоит в том, чтобы очистить «массив», который я упомянул.
Проверьте результаты печати вывода
Результаты, как показано на рисунке выше, которые соответствуют ожидаемым результатам.
Наконец, давайте поговорим о Countdownlatch Countdownlatch = New Countdownlatch (1). Установите 1 в этой области, поэтому вам нужно позвонить в countdownlatch.countdown () один раз, чтобы вычесть 1.
Если это еще одно число, необходимо вызвать соответствующее количество раз, в противном случае поток вызов countdownlatch.await () не будет выполнен.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.