{"id":274979,"date":"2016-02-25T22:39:02","date_gmt":"2016-02-25T19:39:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=274979"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=274979","title":{"rendered":"\u0421\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a \u043f\u043e \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0442\u043e\u0440\u0430\u043c java.util.concurrent.*"},"content":{"rendered":"<p>       \u0426\u0435\u043b\u044c\u044e \u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u0432 \u0438\u0437 \u043f\u0430\u043a\u0435\u0442\u0430 java.util.concurrent. \u041f\u0438\u0448\u0443 \u0435\u0451, \u043f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e, \u043a\u0430\u043a \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u043b\u0435\u0433\u0447\u0438\u0442 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u0432 \u0442\u0435\u043c\u0443 \u0438 \u043f\u043e\u043a\u0430\u0436\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0434\u043b\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0438\u0442\u0435\u0439.<\/p>\n<p>  \u0412 java.util.concurrent \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0443 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430 \u0433\u0440\u0443\u043f\u043f\u044b: Concurrent Collections, Executors, Atomics \u0438 \u0442.\u0434. \u041e\u0434\u043d\u043e\u0439 \u0438\u0437 \u044d\u0442\u0438\u0445 \u0433\u0440\u0443\u043f\u043f \u0431\u0443\u0434\u0435\u0442 Synchronizers (\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0442\u043e\u0440\u044b).<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/303\/865\/e0e\/303865e0e58b4514863ca687a498d9cd.png\"\/><\/p>\n<p>  <b>\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0442\u043e\u0440\u044b<\/b> \u2013 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u0434\u043b\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0438\u0442\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0430\u044e\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443 \u0440\u0435\u0433\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\/\u0438\u043b\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u043d\u0438\u0442\u0435\u0439 \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438, \u0447\u0435\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u044b \u044f\u0437\u044b\u043a\u0430 (\u043c\u043e\u043d\u0438\u0442\u043e\u0440\u044b).<br \/>  <a name=\"habracut\"><\/a><\/p>\n<h4>Semaphore<\/h4>\n<p>  \u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0442\u043e\u0440 Semaphore \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0448\u0430\u0431\u043b\u043e\u043d \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A1%D0%B5%D0%BC%D0%B0%D1%84%D0%BE%D1%80_(%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0)\">\u0421\u0435\u043c\u0430\u0444\u043e\u0440<\/a>. \u0427\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e, \u0441\u0435\u043c\u0430\u0444\u043e\u0440\u044b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b, \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043e\u0431\u0449\u0435\u043c\u0443 \u0440\u0435\u0441\u0443\u0440\u0441\u0443. \u0412 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 (<code>Semaphore(int permits)<\/code> \u0438\u043b\u0438 <code>Semaphore(int permits, boolean fair)<\/code>) \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0438\u0442\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0441\u0435\u043c\u0430\u0444\u043e\u0440 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0442\u044c \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441.<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/9da\/48f\/85b\/9da48f85b5874362bc2279f181613c0e.gif\"\/><br \/>  \u0414\u043e\u0441\u0442\u0443\u043f \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430: \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430 \u0440\u0430\u0432\u043d\u043e <code>int permits<\/code>, \u043a\u043e\u0433\u0434\u0430 \u043d\u0438\u0442\u044c \u0437\u0430\u0445\u043e\u0434\u0438\u0442 \u0432 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0439 \u0431\u043b\u043e\u043a \u043a\u043e\u0434\u0430, \u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0443, \u043a\u043e\u0433\u0434\u0430 \u043d\u0438\u0442\u044c \u0435\u0433\u043e \u043f\u043e\u043a\u0438\u0434\u0430\u0435\u0442, \u0442\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f. \u0415\u0441\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430 \u0440\u0430\u0432\u043d\u043e \u043d\u0443\u043b\u044e, \u0442\u043e \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u043d\u0438\u0442\u044c \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u043f\u043e\u043a\u0430 \u043a\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u043d\u0435 \u0432\u044b\u0439\u0434\u0435\u0442 \u0438\u0437 \u0431\u043b\u043e\u043a\u0430 (\u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0438\u0437 \u0436\u0438\u0437\u043d\u0438 \u0441 <code>permits = 1<\/code>, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0432 \u043a\u0430\u0431\u0438\u043d\u0435\u0442 \u0432 \u043f\u043e\u043b\u0438\u043a\u043b\u0438\u043d\u0438\u043a\u0435: \u043a\u043e\u0433\u0434\u0430 \u043f\u0430\u0446\u0438\u0435\u043d\u0442 \u043f\u043e\u043a\u0438\u0434\u0430\u0435\u0442 \u043a\u0430\u0431\u0438\u043d\u0435\u0442, \u043c\u0438\u0433\u0430\u0435\u0442 \u043b\u0430\u043c\u043f\u0430, \u0438 \u0437\u0430\u0445\u043e\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u0430\u0446\u0438\u0435\u043d\u0442).<br \/>  <a href=\"https:\/\/docs.oracle.com\/javase\/7\/docs\/api\/java\/util\/concurrent\/Semaphore.html\">\u041e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043f\u043e Semaphore.<\/a>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Semaphore<\/b><\/p>\n<div class=\"spoiler_text\">\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440. \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u0430\u0440\u043a\u043e\u0432\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u0432\u043c\u0435\u0449\u0430\u0442\u044c \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 5 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0435\u0439. \u0415\u0441\u043b\u0438 \u043f\u0430\u0440\u043a\u043e\u0432\u043a\u0430 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e, \u0442\u043e \u0432\u043d\u043e\u0432\u044c \u043f\u0440\u0438\u0431\u044b\u0432\u0448\u0438\u0439 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u0434\u043e\u0436\u0434\u0430\u0442\u044c \u043f\u043e\u043a\u0430 \u043d\u0435 \u043e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u0442\u0441\u044f \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u043d\u043e \u043c\u0435\u0441\u0442\u043e. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043e\u043d \u0441\u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043f\u0430\u0440\u043a\u043e\u0432\u0430\u0442\u044c\u0441\u044f.  <\/p>\n<pre><code class=\"java\">import java.util.concurrent.Semaphore;  public class Parking {     \/\/\u041f\u0430\u0440\u043a\u043e\u0432\u043e\u0447\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0437\u0430\u043d\u044f\u0442\u043e - true, \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e - false     private static final boolean[] PARKING_PLACES = new boolean[5];     \/\/\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0444\u043b\u0430\u0433 &quot;\u0441\u043f\u0440\u0430\u0432\u0435\u0434\u043b\u0438\u0432\u044b\u0439&quot;, \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u0435\u0442\u043e\u0434     \/\/a\u0441quire() \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u0438     private static final Semaphore SEMAPHORE = new Semaphore(5, true);      public static void main(String[] args) throws InterruptedException {         for (int i = 1; i &lt;= 7; i++) {             new Thread(new Car(i)).start();             Thread.sleep(400);         }     }      public static class Car implements Runnable {         private int carNumber;          public Car(int carNumber) {             this.carNumber = carNumber;         }          @Override         public void run() {             System.out.printf(&quot;\u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u2116%d \u043f\u043e\u0434\u044a\u0435\u0445\u0430\u043b \u043a \u043f\u0430\u0440\u043a\u043e\u0432\u043a\u0435.\\n&quot;, carNumber);             try {                 \/\/acquire() \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u0437\u0430 \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u0431\u043b\u043e\u043a\u0443 \u043a\u043e\u0434\u0430,                 \/\/\u0435\u0441\u043b\u0438 \u0434\u043e\u0441\u0442\u0443\u043f \u043d\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d, \u043d\u0438\u0442\u044c \u0432\u044b\u0437\u0432\u0430\u0432\u0448\u0430\u044f \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440,                 \/\/\u043f\u043e\u043a\u0430 \u0441\u0435\u043c\u0430\u0444\u043e\u0440 \u043d\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442 \u0434\u043e\u0441\u0442\u0443\u043f                 SEMAPHORE.acquire();                  \/\/\u0418\u0449\u0435\u043c \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0438 \u043f\u0430\u0440\u043a\u0443\u0435\u043c\u0441\u044f                 for (int i = 0; i &lt; 5; i++)                     if (!PARKING_PLACES[i]) {     \/\/\u0415\u0441\u043b\u0438 \u043c\u0435\u0441\u0442\u043e \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e                         PARKING_PLACES[i] = true;  \/\/\u0437\u0430\u043d\u0438\u043c\u0430\u0435\u043c \u0435\u0433\u043e                         System.out.printf(&quot;\u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u2116%d \u043f\u0440\u0438\u043f\u0430\u0440\u043a\u043e\u0432\u0430\u043b\u0441\u044f \u043d\u0430 \u043c\u0435\u0441\u0442\u0435 %d.\\n&quot;, carNumber, i);                         Thread.sleep(5000);       \/\/\u0423\u0445\u043e\u0434\u0438\u043c \u0437\u0430 \u043f\u043e\u043a\u0443\u043f\u043a\u0430\u043c\u0438, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443                         PARKING_PLACES[i] = false;\/\/\u041e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0435\u043c \u043c\u0435\u0441\u0442\u043e                         break;                     }                  \/\/release(), \u043d\u0430\u043f\u0440\u043e\u0442\u0438\u0432, \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0435\u0442 \u0440\u0435\u0441\u0443\u0440\u0441                 SEMAPHORE.release();                 System.out.printf(&quot;\u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u2116%d \u043f\u043e\u043a\u0438\u043d\u0443\u043b \u043f\u0430\u0440\u043a\u043e\u0432\u043a\u0443.\\n&quot;, carNumber);             } catch (InterruptedException e) {             }         }     } }<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b<\/b><\/p>\n<div class=\"spoiler_text\">\u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21161 \u043f\u043e\u0434\u044a\u0435\u0445\u0430\u043b \u043a \u043f\u0430\u0440\u043a\u043e\u0432\u043a\u0435.<br \/>  \u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21161 \u043f\u0440\u0438\u043f\u0430\u0440\u043a\u043e\u0432\u0430\u043b\u0441\u044f \u043d\u0430 \u043c\u0435\u0441\u0442\u0435 0.<br \/>  \u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21162 \u043f\u043e\u0434\u044a\u0435\u0445\u0430\u043b \u043a \u043f\u0430\u0440\u043a\u043e\u0432\u043a\u0435.<br \/>  \u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21162 \u043f\u0440\u0438\u043f\u0430\u0440\u043a\u043e\u0432\u0430\u043b\u0441\u044f \u043d\u0430 \u043c\u0435\u0441\u0442\u0435 1.<br \/>  \u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21163 \u043f\u043e\u0434\u044a\u0435\u0445\u0430\u043b \u043a \u043f\u0430\u0440\u043a\u043e\u0432\u043a\u0435.<br \/>  \u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21163 \u043f\u0440\u0438\u043f\u0430\u0440\u043a\u043e\u0432\u0430\u043b\u0441\u044f \u043d\u0430 \u043c\u0435\u0441\u0442\u0435 2.<br \/>  \u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21164 \u043f\u043e\u0434\u044a\u0435\u0445\u0430\u043b \u043a \u043f\u0430\u0440\u043a\u043e\u0432\u043a\u0435.<br \/>  \u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21164 \u043f\u0440\u0438\u043f\u0430\u0440\u043a\u043e\u0432\u0430\u043b\u0441\u044f \u043d\u0430 \u043c\u0435\u0441\u0442\u0435 3.<br \/>  \u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21165 \u043f\u043e\u0434\u044a\u0435\u0445\u0430\u043b \u043a \u043f\u0430\u0440\u043a\u043e\u0432\u043a\u0435.<br \/>  \u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21165 \u043f\u0440\u0438\u043f\u0430\u0440\u043a\u043e\u0432\u0430\u043b\u0441\u044f \u043d\u0430 \u043c\u0435\u0441\u0442\u0435 4.<br \/>  \u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21166 \u043f\u043e\u0434\u044a\u0435\u0445\u0430\u043b \u043a \u043f\u0430\u0440\u043a\u043e\u0432\u043a\u0435.<br \/>  \u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21167 \u043f\u043e\u0434\u044a\u0435\u0445\u0430\u043b \u043a \u043f\u0430\u0440\u043a\u043e\u0432\u043a\u0435.<br \/>  \u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21161 \u043f\u043e\u043a\u0438\u043d\u0443\u043b \u043f\u0430\u0440\u043a\u043e\u0432\u043a\u0443.<br \/>  \u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21166 \u043f\u0440\u0438\u043f\u0430\u0440\u043a\u043e\u0432\u0430\u043b\u0441\u044f \u043d\u0430 \u043c\u0435\u0441\u0442\u0435 0.<br \/>  \u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21162 \u043f\u043e\u043a\u0438\u043d\u0443\u043b \u043f\u0430\u0440\u043a\u043e\u0432\u043a\u0443.<br \/>  \u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21167 \u043f\u0440\u0438\u043f\u0430\u0440\u043a\u043e\u0432\u0430\u043b\u0441\u044f \u043d\u0430 \u043c\u0435\u0441\u0442\u0435 1.<br \/>  \u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21163 \u043f\u043e\u043a\u0438\u043d\u0443\u043b \u043f\u0430\u0440\u043a\u043e\u0432\u043a\u0443.<br \/>  \u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21164 \u043f\u043e\u043a\u0438\u043d\u0443\u043b \u043f\u0430\u0440\u043a\u043e\u0432\u043a\u0443.<br \/>  \u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21165 \u043f\u043e\u043a\u0438\u043d\u0443\u043b \u043f\u0430\u0440\u043a\u043e\u0432\u043a\u0443.<br \/>  \u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21166 \u043f\u043e\u043a\u0438\u043d\u0443\u043b \u043f\u0430\u0440\u043a\u043e\u0432\u043a\u0443.<br \/>  \u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21167 \u043f\u043e\u043a\u0438\u043d\u0443\u043b \u043f\u0430\u0440\u043a\u043e\u0432\u043a\u0443.  <\/div>\n<\/div>\n<p>  \u0421\u0435\u043c\u0430\u0444\u043e\u0440 \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0442\u0430\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438: \u043e\u043d \u043d\u0435 \u0434\u0430\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044e (\u043d\u0438\u0442\u0438) \u043f\u0440\u0438\u043f\u0430\u0440\u043a\u043e\u0432\u0430\u0442\u044c\u0441\u044f (\u0437\u0430\u0439\u0442\u0438 \u0432 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0439 \u0431\u043b\u043e\u043a \u043a\u043e\u0434\u0430 \u0438 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0431\u0449\u0438\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u043c) \u0435\u0441\u043b\u0438 \u043c\u0435\u0441\u0442 \u043d\u0430 \u043f\u0430\u0440\u043a\u043e\u0432\u043a\u0435 \u043d\u0435\u0442 (\u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0440\u0430\u0432\u0435\u043d 0) \u0421\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043a\u043b\u0430\u0441\u0441 Semaphore \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0437\u0430\u0445\u0432\u0430\u0442 \u0438 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u043e\u0434\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0437\u0430 \u0440\u0430\u0437, \u043d\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0437\u0430\u0434\u0430\u0447\u0435 \u044d\u0442\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u043e.   <\/div>\n<\/div>\n<h4>CountDownLatch<\/h4>\n<p>  CountDownLatch (\u0437\u0430\u043c\u043e\u043a \u0441 \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u043c \u043e\u0442\u0441\u0447\u0435\u0442\u043e\u043c) \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043b\u044e\u0431\u043e\u043c\u0443 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u043d\u0438\u0442\u0435\u0439 \u0432 \u0431\u043b\u043e\u043a\u0435 \u043a\u043e\u0434\u0430 \u043e\u0436\u0438\u0434\u0430\u0442\u044c \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0441\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u0445\u0441\u044f \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u043d\u0438\u0442\u044f\u0445, \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u00ab\u043e\u0442\u043f\u0443\u0449\u0435\u043d\u044b\u00bb, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u0441\u0432\u043e\u044e \u0434\u0435\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c. \u0412 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 CountDownLatch (<code>CountDownLatch(int count)<\/code>) \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043c\u043e\u043a \u00ab\u043e\u0442\u043f\u0443\u0441\u0442\u0438\u043b\u00bb \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043d\u0438\u0442\u0438.<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/46b\/3ae\/b41\/46b3aeb417cf4fb4ba271b4c66b52436.gif\"\/><br \/>  \u0411\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 \u043d\u0438\u0442\u0435\u0439 \u0441\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430: \u043b\u044e\u0431\u0430\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u043d\u0438\u0442\u044c, \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430. \u041a\u043e\u0433\u0434\u0430 \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442 0, \u0432\u0441\u0435 \u043e\u0436\u0438\u0434\u0430\u044e\u0449\u0438\u0435 \u043d\u0438\u0442\u0438 \u0440\u0430\u0437\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044e\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f (\u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043c CountDownLatch \u0438\u0437 \u0436\u0438\u0437\u043d\u0438 \u043c\u043e\u0436\u0435\u0442 \u0441\u043b\u0443\u0436\u0438\u0442\u044c \u0441\u0431\u043e\u0440 \u044d\u043a\u0441\u043a\u0443\u0440\u0441\u0438\u043e\u043d\u043d\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u044b: \u043f\u043e\u043a\u0430 \u043d\u0435 \u043d\u0430\u0431\u0435\u0440\u0435\u0442\u0441\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0447\u0435\u043b\u043e\u0432\u0435\u043a, \u044d\u043a\u0441\u043a\u0443\u0440\u0441\u0438\u044f \u043d\u0435 \u043d\u0430\u0447\u043d\u0435\u0442\u0441\u044f).<br \/>  <a href=\"https:\/\/docs.oracle.com\/javase\/7\/docs\/api\/java\/util\/concurrent\/CountDownLatch.html\">\u041e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043f\u043e CountDownLatch.<\/a>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f CountDownLatch<\/b><\/p>\n<div class=\"spoiler_text\">\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440. \u041c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c\u043d\u0443\u044e \u0433\u043e\u043d\u043a\u0443. \u0412 \u0433\u043e\u043d\u043a\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 \u0443\u0447\u0430\u0441\u0442\u0438\u0435 \u043f\u044f\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0435\u0439. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0433\u043e\u043d\u043a\u0438 \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b\u0438\u0441\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f:  <\/p>\n<ol>\n<li>\u041a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043f\u044f\u0442\u0438 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0435\u0439 \u043f\u043e\u0434\u044a\u0435\u0445\u0430\u043b \u043a \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u043e\u0439 \u043f\u0440\u044f\u043c\u043e\u0439;<\/li>\n<li>\u0411\u044b\u043b\u0430 \u0434\u0430\u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u00ab\u041d\u0430 \u0441\u0442\u0430\u0440\u0442!\u00bb;<\/li>\n<li>\u0411\u044b\u043b\u0430 \u0434\u0430\u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u00ab\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435!\u00bb;<\/li>\n<li>\u0411\u044b\u043b\u0430 \u0434\u0430\u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u00ab\u041c\u0430\u0440\u0448!\u00bb.<\/li>\n<\/ol>\n<p>\u0412\u0430\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0435 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0438 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u043b\u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e.  <\/p>\n<pre><code class=\"java\">import java.util.concurrent.CountDownLatch;  public class Race {     \/\/\u0421\u043e\u0437\u0434\u0430\u0435\u043c CountDownLatch \u043d\u0430 8 &quot;\u0443\u0441\u043b\u043e\u0432\u0438\u0439&quot;     private static final CountDownLatch START = new CountDownLatch(8);     \/\/\u0423\u0441\u043b\u043e\u0432\u043d\u0430\u044f \u0434\u043b\u0438\u043d\u0430 \u0433\u043e\u043d\u043e\u0447\u043d\u043e\u0439 \u0442\u0440\u0430\u0441\u0441\u044b     private static final int trackLength = 500000;      public static void main(String[] args) throws InterruptedException {         for (int i = 1; i &lt;= 5; i++) {             new Thread(new Car(i, (int) (Math.random() * 100 + 50))).start();             Thread.sleep(1000);         }          Thread.sleep(1000);         System.out.println(&quot;\u041d\u0430 \u0441\u0442\u0430\u0440\u0442!&quot;);         START.countDown();\/\/\u041a\u043e\u043c\u0430\u043d\u0434\u0430 \u0434\u0430\u043d\u0430, \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u043c \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u043d\u0430 1         Thread.sleep(1000);         System.out.println(&quot;\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435!&quot;);         START.countDown();\/\/\u041a\u043e\u043c\u0430\u043d\u0434\u0430 \u0434\u0430\u043d\u0430, \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u043c \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u043d\u0430 1         Thread.sleep(1000);         System.out.println(&quot;\u041c\u0430\u0440\u0448!&quot;);         START.countDown();\/\/\u041a\u043e\u043c\u0430\u043d\u0434\u0430 \u0434\u0430\u043d\u0430, \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u043c \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u043d\u0430 1         \/\/\u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0440\u0430\u0432\u043d\u044b\u043c \u043d\u0443\u043b\u044e, \u0438 \u0432\u0441\u0435 \u043e\u0436\u0438\u0434\u0430\u044e\u0449\u0438\u0435 \u043d\u0438\u0442\u0438         \/\/\u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0440\u0430\u0437\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0442\u0441\u044f     }      public static class Car implements Runnable {         private int carNumber;         private int carSpeed;\/\/\u0441\u0447\u0438\u0442\u0430\u0435\u043c, \u0447\u0442\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u0430\u044f          public Car(int carNumber, int carSpeed) {             this.carNumber = carNumber;             this.carSpeed = carSpeed;         }          @Override         public void run() {             try {                 System.out.printf(&quot;\u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u2116%d \u043f\u043e\u0434\u044a\u0435\u0445\u0430\u043b \u043a \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u043e\u0439 \u043f\u0440\u044f\u043c\u043e\u0439.\\n&quot;, carNumber);                 \/\/\u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u043f\u043e\u0434\u044a\u0435\u0445\u0430\u043b \u043a \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u043e\u0439 \u043f\u0440\u044f\u043c\u043e\u0439 - \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e                 \/\/\u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u043c \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u043d\u0430 1                 START.countDown();                 \/\/\u043c\u0435\u0442\u043e\u0434 await() \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442 \u043d\u0438\u0442\u044c, \u0432\u044b\u0437\u0432\u0430\u0432\u0448\u0443\u044e \u0435\u0433\u043e, \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430                 \/\/\u0441\u0447\u0435\u0442\u0447\u0438\u043a CountDownLatch \u043d\u0435 \u0441\u0442\u0430\u043d\u0435\u0442 \u0440\u0430\u0432\u0435\u043d 0                 START.await();                 Thread.sleep(trackLength \/ carSpeed);\/\/\u0436\u0434\u0435\u043c \u043f\u043e\u043a\u0430 \u043f\u0440\u043e\u0435\u0434\u0435\u0442 \u0442\u0440\u0430\u0441\u0441\u0443                 System.out.printf(&quot;\u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u2116%d \u0444\u0438\u043d\u0438\u0448\u0438\u0440\u043e\u0432\u0430\u043b!\\n&quot;, carNumber);             } catch (InterruptedException e) {             }         }     } }<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b<\/b><\/p>\n<div class=\"spoiler_text\">\u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21161 \u043f\u043e\u0434\u044a\u0435\u0445\u0430\u043b \u043a \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u043e\u0439 \u043f\u0440\u044f\u043c\u043e\u0439.<br \/>  \u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21162 \u043f\u043e\u0434\u044a\u0435\u0445\u0430\u043b \u043a \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u043e\u0439 \u043f\u0440\u044f\u043c\u043e\u0439.<br \/>  \u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21163 \u043f\u043e\u0434\u044a\u0435\u0445\u0430\u043b \u043a \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u043e\u0439 \u043f\u0440\u044f\u043c\u043e\u0439.<br \/>  \u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21164 \u043f\u043e\u0434\u044a\u0435\u0445\u0430\u043b \u043a \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u043e\u0439 \u043f\u0440\u044f\u043c\u043e\u0439.<br \/>  \u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21165 \u043f\u043e\u0434\u044a\u0435\u0445\u0430\u043b \u043a \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u043e\u0439 \u043f\u0440\u044f\u043c\u043e\u0439.<br \/>  \u041d\u0430 \u0441\u0442\u0430\u0440\u0442!<br \/>  \u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435!<br \/>  \u041c\u0430\u0440\u0448!<br \/>  \u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21164 \u0444\u0438\u043d\u0438\u0448\u0438\u0440\u043e\u0432\u0430\u043b!<br \/>  \u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21161 \u0444\u0438\u043d\u0438\u0448\u0438\u0440\u043e\u0432\u0430\u043b!<br \/>  \u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21163 \u0444\u0438\u043d\u0438\u0448\u0438\u0440\u043e\u0432\u0430\u043b!<br \/>  \u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21165 \u0444\u0438\u043d\u0438\u0448\u0438\u0440\u043e\u0432\u0430\u043b!<br \/>  \u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21162 \u0444\u0438\u043d\u0438\u0448\u0438\u0440\u043e\u0432\u0430\u043b!  <\/div>\n<\/div>\n<p>  CountDownLatch \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u0432 \u0441\u0430\u043c\u044b\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0445\u0435\u043c\u0430\u0445 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438: \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043a\u0430 \u043e\u0434\u043d\u0430 \u043d\u0438\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443, \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u043d\u0438\u0442\u0438 \u0436\u0434\u0430\u0442\u044c \u0438\u043b\u0438, \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0438\u0442\u044c \u0436\u0434\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0445, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443.  <\/div>\n<\/div>\n<h4>CyclicBarrier<\/h4>\n<p>  CyclicBarrier \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0448\u0430\u0431\u043b\u043e\u043d \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%91%D0%B0%D1%80%D1%8C%D0%B5%D1%80%D0%BD%D0%B0%D1%8F_%D1%81%D0%B8%D0%BD%D1%85%D1%80%D0%BE%D0%BD%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F\">\u0411\u0430\u0440\u044c\u0435\u0440<\/a>. \u0426\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0431\u0430\u0440\u044c\u0435\u0440 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u0447\u043a\u043e\u0439 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u043d\u0438\u0442\u0435\u0439 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0438 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442\u0441\u044f. \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0441\u0435 \u043d\u0438\u0442\u0438 \u043f\u0440\u0438\u0431\u044b\u043b\u0438, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u043f\u0446\u0438\u043e\u043d\u043d\u043e\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 (\u0438\u043b\u0438 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u0431\u0430\u0440\u044c\u0435\u0440 \u0431\u044b\u043b \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d \u0431\u0435\u0437 \u043d\u0435\u0433\u043e), \u0438, \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043e\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e, \u0431\u0430\u0440\u044c\u0435\u0440 \u043b\u043e\u043c\u0430\u0435\u0442\u0441\u044f \u0438 \u043e\u0436\u0438\u0434\u0430\u044e\u0449\u0438\u0435 \u043d\u0438\u0442\u0438 \u00ab\u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u044e\u0442\u0441\u044f\u00bb. \u0412 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0431\u0430\u0440\u044c\u0435\u0440\u0430 (<code>CyclicBarrier(int parties)<\/code> \u0438 <code>CyclicBarrier(int parties, Runnable barrierAction)<\/code>) \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u043e\u0440\u043e\u043d, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u00ab\u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442\u044c\u0441\u044f\u00bb, \u0438, \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e, \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0442\u0438, \u043a\u043e\u0433\u0434\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u043b\u0438\u0441\u044c, \u043d\u043e \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u043e\u0433\u0434\u0430 \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u00ab\u043e\u0442\u043f\u0443\u0449\u0435\u043d\u044b\u00bb. <br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/89a\/f0c\/b71\/89af0cb71aad4465bb9c934b8be91a67.gif\"\/><br \/>  \u0411\u0430\u0440\u044c\u0435\u0440 \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 CountDownLatch, \u043d\u043e \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u043d\u043e\u0432\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u00ab\u0437\u0430\u043c\u043e\u043a\u00bb \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0435\u0433\u043e \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0435\u0442 \u043d\u0443\u043b\u044f, \u0430 \u0431\u0430\u0440\u044c\u0435\u0440 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043d\u043e\u0432\u0430, \u0434\u0430\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043e\u043d \u0441\u043b\u043e\u043c\u0430\u0435\u0442\u0441\u044f. CyclicBarrier \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043e\u0439 \u043c\u0435\u0442\u043e\u0434\u0430 <code>join()<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u00ab\u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u00bb \u043d\u0438\u0442\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043e\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b\u0438\u0441\u044c.<br \/>  <a href=\"https:\/\/docs.oracle.com\/javase\/7\/docs\/api\/java\/util\/concurrent\/CyclicBarrier.html\">\u041e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043f\u043e CyclicBarrier.<\/a>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f CyclicBarrier<\/b><\/p>\n<div class=\"spoiler_text\">\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440. \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u0430\u0440\u043e\u043c\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u043f\u0440\u0430\u0432\u0430. \u041f\u0430\u0440\u043e\u043c \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043f\u043e \u0442\u0440\u0438 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f. \u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u0433\u043e\u043d\u044f\u0442\u044c \u043f\u0430\u0440\u043e\u043c \u043b\u0438\u0448\u043d\u0438\u0439 \u0440\u0430\u0437, \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0435\u0433\u043e, \u043a\u043e\u0433\u0434\u0430 \u0443 \u043f\u0435\u0440\u0435\u043f\u0440\u0430\u0432\u044b \u0441\u043e\u0431\u0435\u0440\u0435\u0442\u0441\u044f \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0442\u0440\u0438 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f.  <\/p>\n<pre><code class=\"java\">import java.util.concurrent.CyclicBarrier;  public class Ferry {     private static final CyclicBarrier BARRIER = new CyclicBarrier(3, new FerryBoat());     \/\/\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0431\u0430\u0440\u044c\u0435\u0440 \u043d\u0430 \u0442\u0440\u0438 \u043d\u0438\u0442\u0438 \u0438 \u0442\u0430\u0441\u043a\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f, \u043a\u043e\u0433\u0434\u0430     \/\/\u0443 \u0431\u0430\u0440\u044c\u0435\u0440\u0430 \u0441\u043e\u0431\u0435\u0440\u0435\u0442\u0441\u044f \u0442\u0440\u0438 \u043d\u0438\u0442\u0438. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e, \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u044b.      public static void main(String[] args) throws InterruptedException {         for (int i = 0; i &lt; 9; i++) {             new Thread(new Car(i)).start();             Thread.sleep(400);         }     }      \/\/\u0422\u0430\u0441\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u0438 \u0441\u0442\u043e\u0440\u043e\u043d\u0430\u043c\u0438 \u0431\u0430\u0440\u044c\u0435\u0440\u0430     public static class FerryBoat implements Runnable {         @Override         public void run() {             try {                 Thread.sleep(500);                 System.out.println(&quot;\u041f\u0430\u0440\u043e\u043c \u043f\u0435\u0440\u0435\u043f\u0440\u0430\u0432\u0438\u043b \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0438!&quot;);             } catch (InterruptedException e) {             }         }     }      \/\/\u0421\u0442\u043e\u0440\u043e\u043d\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0442\u044c \u0431\u0430\u0440\u044c\u0435\u0440\u0430     public static class Car implements Runnable {         private int carNumber;          public Car(int carNumber) {             this.carNumber = carNumber;         }          @Override         public void run() {             try {                 System.out.printf(&quot;\u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u2116%d \u043f\u043e\u0434\u044a\u0435\u0445\u0430\u043b \u043a \u043f\u0430\u0440\u043e\u043c\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043f\u0440\u0430\u0432\u0435.\\n&quot;, carNumber);                 \/\/\u0414\u043b\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043d\u0438\u0442\u0438 \u043e \u0442\u043e\u043c \u0447\u0442\u043e \u043e\u043d\u0430 \u0434\u043e\u0441\u0442\u0438\u0433\u043b\u0430 \u0431\u0430\u0440\u044c\u0435\u0440\u0430, \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0442 await()                 \/\/\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0434\u0430\u043d\u043d\u0430\u044f \u043d\u0438\u0442\u044c \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u0438 \u0436\u0434\u0435\u0442 \u043f\u043e\u043a\u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442 \u0431\u0430\u0440\u044c\u0435\u0440\u0430                 BARRIER.await();                 System.out.printf(&quot;\u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u2116%d \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043b \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435.\\n&quot;, carNumber);             } catch (Exception e) {             }         }     } }<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b<\/b><\/p>\n<div class=\"spoiler_text\">\u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21160 \u043f\u043e\u0434\u044a\u0435\u0445\u0430\u043b \u043a \u043f\u0430\u0440\u043e\u043c\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043f\u0440\u0430\u0432\u0435.<br \/>  \u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21161 \u043f\u043e\u0434\u044a\u0435\u0445\u0430\u043b \u043a \u043f\u0430\u0440\u043e\u043c\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043f\u0440\u0430\u0432\u0435.<br \/>  \u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21162 \u043f\u043e\u0434\u044a\u0435\u0445\u0430\u043b \u043a \u043f\u0430\u0440\u043e\u043c\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043f\u0440\u0430\u0432\u0435.<br \/>  \u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21163 \u043f\u043e\u0434\u044a\u0435\u0445\u0430\u043b \u043a \u043f\u0430\u0440\u043e\u043c\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043f\u0440\u0430\u0432\u0435.<br \/>  \u041f\u0430\u0440\u043e\u043c \u043f\u0435\u0440\u0435\u043f\u0440\u0430\u0432\u0438\u043b \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0438!<br \/>  \u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21162 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043b \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435.<br \/>  \u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21161 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043b \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435.<br \/>  \u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21160 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043b \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435.<br \/>  \u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21164 \u043f\u043e\u0434\u044a\u0435\u0445\u0430\u043b \u043a \u043f\u0430\u0440\u043e\u043c\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043f\u0440\u0430\u0432\u0435.<br \/>  \u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21165 \u043f\u043e\u0434\u044a\u0435\u0445\u0430\u043b \u043a \u043f\u0430\u0440\u043e\u043c\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043f\u0440\u0430\u0432\u0435.<br \/>  \u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21166 \u043f\u043e\u0434\u044a\u0435\u0445\u0430\u043b \u043a \u043f\u0430\u0440\u043e\u043c\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043f\u0440\u0430\u0432\u0435.<br \/>  \u041f\u0430\u0440\u043e\u043c \u043f\u0435\u0440\u0435\u043f\u0440\u0430\u0432\u0438\u043b \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0438!<br \/>  \u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21165 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043b \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435.<br \/>  \u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21164 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043b \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435.<br \/>  \u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21163 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043b \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435.<br \/>  \u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21167 \u043f\u043e\u0434\u044a\u0435\u0445\u0430\u043b \u043a \u043f\u0430\u0440\u043e\u043c\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043f\u0440\u0430\u0432\u0435.<br \/>  \u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21168 \u043f\u043e\u0434\u044a\u0435\u0445\u0430\u043b \u043a \u043f\u0430\u0440\u043e\u043c\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043f\u0440\u0430\u0432\u0435.<br \/>  \u041f\u0430\u0440\u043e\u043c \u043f\u0435\u0440\u0435\u043f\u0440\u0430\u0432\u0438\u043b \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0438!<br \/>  \u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21168 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043b \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435.<br \/>  \u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21166 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043b \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435.<br \/>  \u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u21167 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043b \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435.  <\/div>\n<\/div>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u0442\u0440\u0438 \u043d\u0438\u0442\u0438 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u044e\u0442 \u043c\u0435\u0442\u043e\u0434\u0430 <code>await()<\/code>, \u0431\u0430\u0440\u044c\u0435\u0440\u043d\u043e\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f, \u0438 \u043f\u0430\u0440\u043e\u043c \u043f\u0435\u0440\u0435\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0442\u0440\u0438 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f \u0438\u0437 \u0441\u043a\u043e\u043f\u0438\u0432\u0448\u0438\u0445\u0441\u044f. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u0446\u0438\u043a\u043b.  <\/div>\n<\/div>\n<h4>Exchanger&lt;V&gt;<\/h4>\n<p>  Exchanger (\u043e\u0431\u043c\u0435\u043d\u043d\u0438\u043a) \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f, \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u043d\u0438\u0442\u044f\u043c\u0438 \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u043e\u0431\u043e\u0438\u0445 \u043d\u0438\u0442\u0435\u0439. \u041e\u0431\u043c\u0435\u043d\u043d\u0438\u043a \u2014 \u043e\u0431\u043e\u0431\u0449\u0435\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441, \u043e\u043d \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0442\u0438\u043f\u043e\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438.<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/947\/ef3\/f47\/947ef3f47ff843a099059006b30ea54d.gif\"\/><br \/>  \u041e\u0431\u043c\u0435\u043d\u043d\u0438\u043a \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u0447\u043a\u043e\u0439 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0430\u0440\u044b \u043d\u0438\u0442\u0435\u0439: \u043d\u0438\u0442\u044c, \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u0443 \u043e\u0431\u043c\u0435\u043d\u043d\u0438\u043a\u0430 \u043c\u0435\u0442\u043e\u0434 <code>exchange()<\/code> \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438 \u0436\u0434\u0435\u0442 \u0434\u0440\u0443\u0433\u0443\u044e \u043d\u0438\u0442\u044c. \u041a\u043e\u0433\u0434\u0430 \u0434\u0440\u0443\u0433\u0430\u044f \u043d\u0438\u0442\u044c \u0432\u044b\u0437\u043e\u0432\u0435\u0442 \u0442\u043e\u0442 \u0436\u0435 \u043c\u0435\u0442\u043e\u0434, \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u043e\u0431\u043c\u0435\u043d \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438: \u043a\u0430\u0436\u0434\u0430\u044f \u0438\u0437 \u043d\u0438\u0445 \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0434\u0440\u0443\u0433\u043e\u0439 \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 <code>exchange()<\/code>. \u0421\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043e\u0431\u043c\u0435\u043d\u043d\u0438\u043a \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 <code>null<\/code> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u042d\u0442\u043e \u0434\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0432 \u043e\u0434\u043d\u0443 \u0441\u0442\u043e\u0440\u043e\u043d\u0443, \u0438\u043b\u0438, \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u0430\u043a \u0442\u043e\u0447\u043a\u0443 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0432\u0443\u0445 \u043d\u0438\u0442\u0435\u0439.<br \/>  <a href=\"https:\/\/docs.oracle.com\/javase\/7\/docs\/api\/java\/util\/concurrent\/Exchanger.html\">\u041e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043f\u043e Exchanger.<\/a>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Exchanger<\/b><\/p>\n<div class=\"spoiler_text\">\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440. \u0415\u0441\u0442\u044c \u0434\u0432\u0430 \u0433\u0440\u0443\u0437\u043e\u0432\u0438\u043a\u0430: \u043e\u0434\u0438\u043d \u0435\u0434\u0435\u0442 \u0438\u0437 \u043f\u0443\u043d\u043a\u0442\u0430 A \u0432 \u043f\u0443\u043d\u043a\u0442 D, \u0434\u0440\u0443\u0433\u043e\u0439 \u0438\u0437 \u043f\u0443\u043d\u043a\u0442\u0430 B \u0432 \u043f\u0443\u043d\u043a\u0442 \u0421. \u0414\u043e\u0440\u043e\u0433\u0438 AD \u0438 BC \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u044e\u0442\u0441\u044f \u0432 \u043f\u0443\u043d\u043a\u0442\u0435 E. \u0418\u0437 \u043f\u0443\u043d\u043a\u0442\u043e\u0432 A \u0438 B \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0441\u044b\u043b\u043a\u0438 \u0432 \u043f\u0443\u043d\u043a\u0442\u044b C \u0438 D. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0433\u0440\u0443\u0437\u043e\u0432\u0438\u043a\u0438 \u0432 \u043f\u0443\u043d\u043a\u0442\u0435 E \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442\u044c\u0441\u044f \u0438 \u043e\u0431\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u043f\u043e\u0441\u044b\u043b\u043a\u0430\u043c\u0438.  <\/p>\n<pre><code class=\"java\">import java.util.concurrent.Exchanger;  public class Delivery {     \/\/\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043e\u0431\u043c\u0435\u043d\u043d\u0438\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u043c\u0435\u043d\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u0438\u043f\u043e\u043c String     private static final Exchanger&lt;String&gt; EXCHANGER = new Exchanger&lt;&gt;();      public static void main(String[] args) throws InterruptedException {         String[] p1 = new String[]{&quot;{\u043f\u043e\u0441\u044b\u043b\u043a\u0430 A-&gt;D}&quot;, &quot;{\u043f\u043e\u0441\u044b\u043b\u043a\u0430 A-&gt;C}&quot;};\/\/\u0424\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0433\u0440\u0443\u0437 \u0434\u043b\u044f 1-\u0433\u043e \u0433\u0440\u0443\u0437\u043e\u0432\u0438\u043a\u0430         String[] p2 = new String[]{&quot;{\u043f\u043e\u0441\u044b\u043b\u043a\u0430 B-&gt;C}&quot;, &quot;{\u043f\u043e\u0441\u044b\u043b\u043a\u0430 B-&gt;D}&quot;};\/\/\u0424\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0433\u0440\u0443\u0437 \u0434\u043b\u044f 2-\u0433\u043e \u0433\u0440\u0443\u0437\u043e\u0432\u0438\u043a\u0430         new Thread(new Truck(1, &quot;A&quot;, &quot;D&quot;, p1)).start();\/\/\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c 1-\u0439 \u0433\u0440\u0443\u0437\u043e\u0432\u0438\u043a \u0438\u0437 \u0410 \u0432 D         Thread.sleep(100);         new Thread(new Truck(2, &quot;B&quot;, &quot;C&quot;, p2)).start();\/\/\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c 2-\u0439 \u0433\u0440\u0443\u0437\u043e\u0432\u0438\u043a \u0438\u0437 \u0412 \u0432 \u0421     }      public static class Truck implements Runnable {         private int number;         private String dep;         private String dest;         private String[] parcels;          public Truck(int number, String departure, String destination, String[] parcels) {             this.number = number;             this.dep = departure;             this.dest = destination;             this.parcels = parcels;         }          @Override         public void run() {             try {                 System.out.printf(&quot;\u0412 \u0433\u0440\u0443\u0437\u043e\u0432\u0438\u043a \u2116%d \u043f\u043e\u0433\u0440\u0443\u0437\u0438\u043b\u0438: %s \u0438 %s.\\n&quot;, number, parcels[0], parcels[1]);                 System.out.printf(&quot;\u0413\u0440\u0443\u0437\u043e\u0432\u0438\u043a \u2116%d \u0432\u044b\u0435\u0445\u0430\u043b \u0438\u0437 \u043f\u0443\u043d\u043a\u0442\u0430 %s \u0432 \u043f\u0443\u043d\u043a\u0442 %s.\\n&quot;, number, dep, dest);                 Thread.sleep(1000 + (long) Math.random() * 5000);                 System.out.printf(&quot;\u0413\u0440\u0443\u0437\u043e\u0432\u0438\u043a \u2116%d \u043f\u0440\u0438\u0435\u0445\u0430\u043b \u0432 \u043f\u0443\u043d\u043a\u0442 \u0415.\\n&quot;, number);                 parcels[1] = EXCHANGER.exchange(parcels[1]);\/\/\u041f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 exchange() \u043d\u0438\u0442\u044c \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438 \u0436\u0434\u0435\u0442                 \/\/\u043f\u043e\u043a\u0430 \u0434\u0440\u0443\u0433\u0430\u044f \u043d\u0438\u0442\u044c \u0432\u044b\u0437\u043e\u0432\u0435\u0442 exchange(), \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u043e\u0431\u043c\u0435\u043d \u043f\u043e\u0441\u044b\u043b\u043a\u0430\u043c\u0438                 System.out.printf(&quot;\u0412 \u0433\u0440\u0443\u0437\u043e\u0432\u0438\u043a \u2116%d \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u043b\u0438 \u043f\u043e\u0441\u044b\u043b\u043a\u0443 \u0434\u043b\u044f \u043f\u0443\u043d\u043a\u0442\u0430 %s.\\n&quot;, number, dest);                 Thread.sleep(1000 + (long) Math.random() * 5000);                 System.out.printf(&quot;\u0413\u0440\u0443\u0437\u043e\u0432\u0438\u043a \u2116%d \u043f\u0440\u0438\u0435\u0445\u0430\u043b \u0432 %s \u0438 \u0434\u043e\u0441\u0442\u0430\u0432\u0438\u043b: %s \u0438 %s.\\n&quot;, number, dest, parcels[0], parcels[1]);             } catch (InterruptedException e) {             }         }     } }<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b<\/b><\/p>\n<div class=\"spoiler_text\">\u0412 \u0433\u0440\u0443\u0437\u043e\u0432\u0438\u043a \u21161 \u043f\u043e\u0433\u0440\u0443\u0437\u0438\u043b\u0438: {\u043f\u043e\u0441\u044b\u043b\u043a\u0430 A-&gt;D} \u0438 {\u043f\u043e\u0441\u044b\u043b\u043a\u0430 A-&gt;C}.<br \/>  \u0413\u0440\u0443\u0437\u043e\u0432\u0438\u043a \u21161 \u0432\u044b\u0435\u0445\u0430\u043b \u0438\u0437 \u043f\u0443\u043d\u043a\u0442\u0430 A \u0432 \u043f\u0443\u043d\u043a\u0442 D.<br \/>  \u0412 \u0433\u0440\u0443\u0437\u043e\u0432\u0438\u043a \u21162 \u043f\u043e\u0433\u0440\u0443\u0437\u0438\u043b\u0438: {\u043f\u043e\u0441\u044b\u043b\u043a\u0430 B-&gt;C} \u0438 {\u043f\u043e\u0441\u044b\u043b\u043a\u0430 B-&gt;D}.<br \/>  \u0413\u0440\u0443\u0437\u043e\u0432\u0438\u043a \u21162 \u0432\u044b\u0435\u0445\u0430\u043b \u0438\u0437 \u043f\u0443\u043d\u043a\u0442\u0430 B \u0432 \u043f\u0443\u043d\u043a\u0442 C.<br \/>  \u0413\u0440\u0443\u0437\u043e\u0432\u0438\u043a \u21161 \u043f\u0440\u0438\u0435\u0445\u0430\u043b \u0432 \u043f\u0443\u043d\u043a\u0442 \u0415.<br \/>  \u0413\u0440\u0443\u0437\u043e\u0432\u0438\u043a \u21162 \u043f\u0440\u0438\u0435\u0445\u0430\u043b \u0432 \u043f\u0443\u043d\u043a\u0442 \u0415.<br \/>  \u0412 \u0433\u0440\u0443\u0437\u043e\u0432\u0438\u043a \u21162 \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u043b\u0438 \u043f\u043e\u0441\u044b\u043b\u043a\u0443 \u0434\u043b\u044f \u043f\u0443\u043d\u043a\u0442\u0430 C.<br \/>  \u0412 \u0433\u0440\u0443\u0437\u043e\u0432\u0438\u043a \u21161 \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u043b\u0438 \u043f\u043e\u0441\u044b\u043b\u043a\u0443 \u0434\u043b\u044f \u043f\u0443\u043d\u043a\u0442\u0430 D.<br \/>  \u0413\u0440\u0443\u0437\u043e\u0432\u0438\u043a \u21162 \u043f\u0440\u0438\u0435\u0445\u0430\u043b \u0432 C \u0438 \u0434\u043e\u0441\u0442\u0430\u0432\u0438\u043b: {\u043f\u043e\u0441\u044b\u043b\u043a\u0430 B-&gt;C} \u0438 {\u043f\u043e\u0441\u044b\u043b\u043a\u0430 A-&gt;C}.<br \/>  \u0413\u0440\u0443\u0437\u043e\u0432\u0438\u043a \u21161 \u043f\u0440\u0438\u0435\u0445\u0430\u043b \u0432 D \u0438 \u0434\u043e\u0441\u0442\u0430\u0432\u0438\u043b: {\u043f\u043e\u0441\u044b\u043b\u043a\u0430 A-&gt;D} \u0438 {\u043f\u043e\u0441\u044b\u043b\u043a\u0430 B-&gt;D}.  <\/div>\n<\/div>\n<p>  \u041a\u0430\u043a \u043c\u044b \u0432\u0438\u0434\u0438\u043c, \u043a\u043e\u0433\u0434\u0430 \u043e\u0434\u0438\u043d \u0433\u0440\u0443\u0437\u043e\u0432\u0438\u043a (\u043e\u0434\u043d\u0430 \u043d\u0438\u0442\u044c) \u043f\u0440\u0438\u0435\u0437\u0436\u0430\u0435\u0442 \u0432 \u043f\u0443\u043d\u043a\u0442 \u0415 (\u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442 \u0442\u043e\u0447\u043a\u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438), \u043e\u043d \u0436\u0434\u0435\u0442 \u043f\u043e\u043a\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u0433\u0440\u0443\u0437\u043e\u0432\u0438\u043a (\u0434\u0440\u0443\u0433\u0430\u044f \u043d\u0438\u0442\u044c) \u043f\u0440\u0438\u0435\u0434\u0435\u0442 \u0432 \u043f\u0443\u043d\u043a\u0442 \u0415 (\u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0435\u0442 \u0442\u043e\u0447\u043a\u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438). \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u0431\u043c\u0435\u043d \u043f\u043e\u0441\u044b\u043b\u043a\u0430\u043c\u0438 (String) \u0438 \u043e\u0431\u0430 \u0433\u0440\u0443\u0437\u043e\u0432\u0438\u043a\u0430 (\u043d\u0438\u0442\u0438) \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044e\u0442 \u0441\u0432\u043e\u0439 \u043f\u0443\u0442\u044c (\u0440\u0430\u0431\u043e\u0442\u0443).  <\/div>\n<\/div>\n<h4>Phaser<\/h4>\n<p>  Phaser (\u0444\u0430\u0437\u0435\u0440), \u043a\u0430\u043a \u0438 CyclicBarrier, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%91%D0%B0%D1%80%D1%8C%D0%B5%D1%80%D0%BD%D0%B0%D1%8F_%D1%81%D0%B8%D0%BD%D1%85%D1%80%D0%BE%D0%BD%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F\">\u0411\u0430\u0440\u044c\u0435\u0440<\/a>, \u043d\u043e, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0438 \u043e\u0442 CyclicBarrier, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u0438. \u042d\u0442\u043e\u0442 \u043a\u043b\u0430\u0441\u0441 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0438\u0442\u0438, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0444\u0430\u0437\u0443 \u0438\u043b\u0438 \u0441\u0442\u0430\u0434\u0438\u044e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u0431\u0449\u0435\u0433\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f. \u041a\u0430\u043a \u0438 CyclicBarrier, Phaser \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u0447\u043a\u043e\u0439 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u043d\u0438\u0442\u0438-\u0443\u0447\u0430\u0441\u0442\u043d\u0438\u0446\u044b. \u041a\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043f\u0440\u0438\u0431\u044b\u043b\u0438, Phaser \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0444\u0430\u0437\u0435 \u0438 \u0441\u043d\u043e\u0432\u0430 \u043e\u0436\u0438\u0434\u0430\u0435\u0442 \u0435\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f. <\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c Phaser \u0438 CyclicBarrier, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0432\u0430\u0436\u043d\u044b\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 Phaser:  <\/p>\n<ul>\n<li>\u041a\u0430\u0436\u0434\u0430\u044f \u0444\u0430\u0437\u0430 (\u0446\u0438\u043a\u043b \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438) \u0438\u043c\u0435\u0435\u0442 \u043d\u043e\u043c\u0435\u0440;<\/li>\n<li>\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u043e\u0440\u043e\u043d-\u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u043e\u0432 \u0436\u0435\u0441\u0442\u043a\u043e \u043d\u0435 \u0437\u0430\u0434\u0430\u043d\u043e \u0438 \u043c\u043e\u0436\u0435\u0442 \u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f: \u043d\u0438\u0442\u044c \u043c\u043e\u0436\u0435\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0430 \u0438 \u043e\u0442\u043c\u0435\u043d\u044f\u0442\u044c \u0441\u0432\u043e\u0435 \u0443\u0447\u0430\u0441\u0442\u0438\u0435;<\/li>\n<li>\u0423\u0447\u0430\u0441\u0442\u043d\u0438\u043a \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u043d \u043e\u0436\u0438\u0434\u0430\u0442\u044c, \u043f\u043e\u043a\u0430 \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0438 \u0441\u043e\u0431\u0435\u0440\u0443\u0442\u0441\u044f \u043d\u0430 \u0431\u0430\u0440\u044c\u0435\u0440\u0435. \u0427\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u0441\u0432\u043e\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u043e \u0441\u0432\u043e\u0435\u043c \u043f\u0440\u0438\u0431\u044b\u0442\u0438\u0438;<\/li>\n<li>\u0421\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u0441\u0432\u0438\u0434\u0435\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c\u044e \u0432 \u0431\u0430\u0440\u044c\u0435\u0440\u0435;<\/li>\n<li>\u041d\u0438\u0442\u044c \u043c\u043e\u0436\u0435\u0442 \u0438 \u043d\u0435 \u0431\u044b\u0442\u044c \u0441\u0442\u043e\u0440\u043e\u043d\u043e\u0439-\u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u043e\u043c \u0431\u0430\u0440\u044c\u0435\u0440\u0430, \u0447\u0442\u043e\u0431\u044b \u043e\u0436\u0438\u0434\u0430\u0442\u044c \u0435\u0433\u043e \u043f\u0440\u0435\u043e\u0434\u043e\u043b\u0435\u043d\u0438\u044f;<\/li>\n<li>\u0423 \u0444\u0430\u0437\u0435\u0440\u0430 \u043d\u0435\u0442 \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f.<\/li>\n<\/ul>\n<p>  \u041e\u0431\u044a\u0435\u043a\u0442 Phaser \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u043e\u0432:<\/p>\n<pre><code class=\"java\">Phaser() Phaser(int parties) <\/code><\/pre>\n<p>  \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 parties \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u043e\u0440\u043e\u043d-\u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0444\u0430\u0437\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f. \u041f\u0435\u0440\u0432\u044b\u0439 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 Phaser \u0431\u0435\u0437 \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u0441\u0442\u043e\u0440\u043e\u043d, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0431\u0430\u0440\u044c\u0435\u0440 \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0442\u043e\u0436\u0435 \u00ab\u0437\u0430\u043a\u0440\u044b\u0442\u00bb. \u0412\u0442\u043e\u0440\u043e\u0439 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u0435 \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u043e\u0440\u043e\u043d. \u0411\u0430\u0440\u044c\u0435\u0440 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043f\u0440\u0438\u0431\u044b\u043b\u0438, \u0438\u043b\u0438, \u0435\u0441\u043b\u0438 \u0441\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a. (\u0423 \u043a\u043b\u0430\u0441\u0441\u0430 Phaser \u0435\u0449\u0435 \u0435\u0441\u0442\u044c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u044b, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 Phaser, \u043d\u043e \u043c\u044b \u0438\u0445 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u043c.)<\/p>\n<p>  \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b:  <\/p>\n<ul>\n<li><b>int register()<\/b> \u2014 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442 \u0441\u0442\u043e\u0440\u043e\u043d\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0444\u0430\u0437\u044b. \u0412\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u043d\u0438\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0445\u043e\u0447\u0435\u0442 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u043e\u043c\u0435\u0440 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0444\u0430\u0437\u044b;<\/li>\n<li><b>int getPhase()<\/b> \u2014 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u043e\u043c\u0435\u0440 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0444\u0430\u0437\u044b;<\/li>\n<li><b>int arriveAndAwaitAdvance()<\/b> \u2014 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0447\u0442\u043e \u043d\u0438\u0442\u044c \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0444\u0430\u0437\u044b. \u041d\u0438\u0442\u044c \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430, \u043f\u043e\u043a\u0430 \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043d\u0435 \u0437\u0430\u043a\u043e\u043d\u0447\u0430\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u0443\u044e \u0444\u0430\u0437\u0443. \u0422\u043e\u0447\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u043e\u0433 <code>CyclicBarrier.await()<\/code>. \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u043e\u043c\u0435\u0440 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0444\u0430\u0437\u044b;<\/li>\n<li><b>int arrive()<\/b> \u2014 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442, \u0447\u0442\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0430 \u0444\u0430\u0437\u0443, \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u043e\u043c\u0435\u0440 \u0444\u0430\u0437\u044b. \u041f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u043d\u0438\u0442\u044c \u043d\u0435 \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u0430 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u0441\u044f;<\/li>\n<li><b>int arriveAndDeregister()<\/b> \u2014 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u0432\u0441\u0435\u0445 \u0444\u0430\u0437 \u0441\u0442\u043e\u0440\u043e\u043d\u043e\u0439 \u0438 \u0441\u043d\u0438\u043c\u0430\u0435\u0442 \u0435\u0435 \u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438. \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u043e\u043c\u0435\u0440 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0444\u0430\u0437\u044b;<\/li>\n<li><b>awaitAdvance(int phase)<\/b> \u2014 \u0435\u0441\u043b\u0438 phase \u0440\u0430\u0432\u043d\u043e \u043d\u043e\u043c\u0435\u0440\u0443 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0444\u0430\u0437\u044b, \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u0432\u0448\u0443\u044e \u0435\u0433\u043e \u043d\u0438\u0442\u044c \u0434\u043e \u0435\u0451 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f.<\/li>\n<\/ul>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/086\/6a4\/b7a\/0866a4b7acdf416384d4e7372b49a34b.gif\"\/><br \/>  <a href=\"https:\/\/docs.oracle.com\/javase\/7\/docs\/api\/java\/util\/concurrent\/Phaser.html\">\u041e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043f\u043e Phaser.<\/a>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Phaser<\/b><\/p>\n<div class=\"spoiler_text\">\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440. \u0415\u0441\u0442\u044c \u043f\u044f\u0442\u044c \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u043a. \u041d\u0430 \u043f\u0435\u0440\u0432\u044b\u0445 \u0447\u0435\u0442\u044b\u0440\u0435\u0445 \u0438\u0437 \u043d\u0438\u0445 \u043c\u043e\u0433\u0443\u0442 \u0441\u0442\u043e\u044f\u0442\u044c \u043f\u0430\u0441\u0441\u0430\u0436\u0438\u0440\u044b \u0438 \u0436\u0434\u0430\u0442\u044c \u0430\u0432\u0442\u043e\u0431\u0443\u0441\u0430. \u0410\u0432\u0442\u043e\u0431\u0443\u0441 \u0432\u044b\u0435\u0437\u0436\u0430\u0435\u0442 \u0438\u0437 \u043f\u0430\u0440\u043a\u0430 \u0438 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f. \u041f\u043e\u0441\u043b\u0435 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0430\u0432\u0442\u043e\u0431\u0443\u0441 \u0435\u0434\u0435\u0442 \u0432 \u043f\u0430\u0440\u043a. \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0431\u0440\u0430\u0442\u044c \u043f\u0430\u0441\u0441\u0430\u0436\u0438\u0440\u043e\u0432 \u0438 \u0432\u044b\u0441\u0430\u0434\u0438\u0442\u044c \u0438\u0445 \u043d\u0430 \u043d\u0443\u0436\u043d\u044b\u0445 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430\u0445.  <\/p>\n<pre><code class=\"java\">import java.util.concurrent.Phaser;  public class Bus {     private static final Phaser PHASER = new Phaser(1);\/\/\u0421\u0440\u0430\u0437\u0443 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c \u0433\u043b\u0430\u0432\u043d\u0443\u044e \u043d\u0438\u0442\u044c     \/\/\u0424\u0430\u0437\u044b 0 \u0438 6 - \u044d\u0442\u043e \u0430\u0432\u0442\u043e\u0431\u0443\u0441\u043d\u044b\u0439 \u043f\u0430\u0440\u043a, 1 - 5 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438      public static void main(String[] args) throws InterruptedException {         for (int i = 1; i &lt; 5; i++) {           \/\/\u0413\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u043f\u0430\u0441\u0441\u0430\u0436\u0438\u0440\u043e\u0432 \u043d\u0430 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430\u0445             if ((int) (Math.random() * 3) &gt; 0)                 new Passenger(PHASER, i, i + 1);\/\/\u042d\u0442\u043e\u0442 \u043f\u0430\u0441\u0441\u0430\u0436\u0438\u0440 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439              if ((int) (Math.random() * 3) == 2)                 new Passenger(PHASER, i, 5);    \/\/\u042d\u0442\u043e\u0442 \u043f\u0430\u0441\u0441\u0430\u0436\u0438\u0440 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439         }          System.out.println(&quot;\u0410\u0432\u0442\u043e\u0431\u0443\u0441 \u0432\u044b\u0435\u0445\u0430\u043b \u0438\u0437 \u043f\u0430\u0440\u043a\u0430.&quot;);         PHASER.arrive();\/\/\u0412 \u0444\u0430\u0437\u0435 0 \u0432\u0441\u0435\u0433\u043e 1 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a          for (int i = 1; i &lt; 6; i++) {             System.out.println(&quot;\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u2116 &quot; + PHASER.getPhase());             Thread.sleep(100);\/\/\u0416\u0434\u0435\u043c \u043f\u043e\u043a\u0430 \u043f\u0430\u0441\u0441\u0430\u0436\u0438\u0440\u044b \u0441\u044f\u0434\u0443\u0442 \u0438 \u0441\u043e\u0439\u0434\u0443\u0442             PHASER.arrive();\/\/\u041a\u0442\u043e \u043d\u0435 \u0443\u0441\u043f\u0435\u043b, \u0442\u043e\u0442 \u043e\u043f\u043e\u0437\u0434\u0430\u043b)         }          System.out.println(&quot;\u0410\u0432\u0442\u043e\u0431\u0443\u0441 \u0443\u0435\u0445\u0430\u043b \u0432 \u043f\u0430\u0440\u043a.&quot;);         PHASER.arriveAndDeregister();\/\/\u0421\u043d\u0438\u043c\u0430\u0435\u043c \u0433\u043b\u0430\u0432\u043d\u0443\u044e \u043d\u0438\u0442\u044c, \u043b\u043e\u043c\u0430\u0435\u043c \u0431\u0430\u0440\u044c\u0435\u0440     }      public static class Passenger extends Thread {         private Phaser phaser;         private int dep;         private int dest;          public Passenger(Phaser phaser, int departure, int destination) {             this.phaser = phaser;             this.dep = departure;             this.dest = destination;             System.out.println(this + &quot; \u0436\u0434\u0451\u0442 \u043d\u0430 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u2116 &quot; + dep);             this.start();         }          @Override         public void run() {             try {                 while (dep != phaser.getPhase())\/\/\u041f\u043e\u043a\u0430 \u0430\u0432\u0442\u043e\u0431\u0443\u0441 \u043d\u0435 \u043f\u0440\u0438\u0435\u0434\u0435\u0442 \u043d\u0430 \u043d\u0443\u0436\u043d\u0443\u044e \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443                     phaser.awaitAdvance(phaser.getPhase());\/\/\u0436\u0434\u0435\u043c \u0435\u0433\u043e                  Thread.sleep(10);                 phaser.register();\/\/\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c \u043d\u0438\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u0444\u0430\u0437\u0430\u0445                 System.out.println(this + &quot; \u0441\u0435\u043b \u0432 \u0430\u0432\u0442\u043e\u0431\u0443\u0441.&quot;);                  while (dest != phaser.getPhase())   \/\/\u041f\u043e\u043a\u0430 \u0430\u0432\u0442\u043e\u0431\u0443\u0441 \u043d\u0435 \u043f\u0440\u0438\u0435\u0434\u0435\u0442 \u043d\u0430 \u043d\u0443\u0436\u043d\u0443\u044e \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443(\u0444\u0430\u0437\u0443)                     phaser.arriveAndAwaitAdvance(); \/\/\u0417\u0430\u044f\u0432\u043b\u044f\u0435\u043c \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u0444\u0430\u0437\u0435 \u043e \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438 \u0438 \u0436\u0434\u0435\u043c                  Thread.sleep(10);                 phaser.arriveAndDeregister();   \/\/\u041e\u0442\u043c\u0435\u043d\u044f\u0435\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044e \u043d\u0430 \u043d\u0443\u0436\u043d\u043e\u0439 \u0444\u0430\u0437\u0435                 System.out.println(this + &quot; \u043f\u043e\u043a\u0438\u043d\u0443\u043b \u0430\u0432\u0442\u043e\u0431\u0443\u0441.&quot;);             } catch (InterruptedException e) {             }         }          @Override         public String toString() {             return &quot;\u041f\u0430\u0441\u0441\u0430\u0436\u0438\u0440{&quot; + dep + &quot; -&gt; &quot; + dest + '}';         }     } }<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b<\/b><\/p>\n<div class=\"spoiler_text\">\u041f\u0430\u0441\u0441\u0430\u0436\u0438\u0440{1 -&gt; 2} \u0436\u0434\u0451\u0442 \u043d\u0430 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u2116 1<br \/>  \u041f\u0430\u0441\u0441\u0430\u0436\u0438\u0440{1 -&gt; 5} \u0436\u0434\u0451\u0442 \u043d\u0430 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u2116 1<br \/>  \u041f\u0430\u0441\u0441\u0430\u0436\u0438\u0440{2 -&gt; 3} \u0436\u0434\u0451\u0442 \u043d\u0430 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u2116 2<br \/>  \u041f\u0430\u0441\u0441\u0430\u0436\u0438\u0440{2 -&gt; 5} \u0436\u0434\u0451\u0442 \u043d\u0430 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u2116 2<br \/>  \u041f\u0430\u0441\u0441\u0430\u0436\u0438\u0440{3 -&gt; 4} \u0436\u0434\u0451\u0442 \u043d\u0430 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u2116 3<br \/>  \u041f\u0430\u0441\u0441\u0430\u0436\u0438\u0440{4 -&gt; 5} \u0436\u0434\u0451\u0442 \u043d\u0430 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u2116 4<br \/>  \u041f\u0430\u0441\u0441\u0430\u0436\u0438\u0440{4 -&gt; 5} \u0436\u0434\u0451\u0442 \u043d\u0430 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u2116 4<br \/>  \u0410\u0432\u0442\u043e\u0431\u0443\u0441 \u0432\u044b\u0435\u0445\u0430\u043b \u0438\u0437 \u043f\u0430\u0440\u043a\u0430.<br \/>  \u041e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u2116 1<br \/>  \u041f\u0430\u0441\u0441\u0430\u0436\u0438\u0440{1 -&gt; 5} \u0441\u0435\u043b \u0432 \u0430\u0432\u0442\u043e\u0431\u0443\u0441.<br \/>  \u041f\u0430\u0441\u0441\u0430\u0436\u0438\u0440{1 -&gt; 2} \u0441\u0435\u043b \u0432 \u0430\u0432\u0442\u043e\u0431\u0443\u0441.<br \/>  \u041e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u2116 2<br \/>  \u041f\u0430\u0441\u0441\u0430\u0436\u0438\u0440{2 -&gt; 3} \u0441\u0435\u043b \u0432 \u0430\u0432\u0442\u043e\u0431\u0443\u0441.<br \/>  \u041f\u0430\u0441\u0441\u0430\u0436\u0438\u0440{1 -&gt; 2} \u043f\u043e\u043a\u0438\u043d\u0443\u043b \u0430\u0432\u0442\u043e\u0431\u0443\u0441.<br \/>  \u041f\u0430\u0441\u0441\u0430\u0436\u0438\u0440{2 -&gt; 5} \u0441\u0435\u043b \u0432 \u0430\u0432\u0442\u043e\u0431\u0443\u0441.<br \/>  \u041e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u2116 3<br \/>  \u041f\u0430\u0441\u0441\u0430\u0436\u0438\u0440{2 -&gt; 3} \u043f\u043e\u043a\u0438\u043d\u0443\u043b \u0430\u0432\u0442\u043e\u0431\u0443\u0441.<br \/>  \u041f\u0430\u0441\u0441\u0430\u0436\u0438\u0440{3 -&gt; 4} \u0441\u0435\u043b \u0432 \u0430\u0432\u0442\u043e\u0431\u0443\u0441.<br \/>  \u041e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u2116 4<br \/>  \u041f\u0430\u0441\u0441\u0430\u0436\u0438\u0440{4 -&gt; 5} \u0441\u0435\u043b \u0432 \u0430\u0432\u0442\u043e\u0431\u0443\u0441.<br \/>  \u041f\u0430\u0441\u0441\u0430\u0436\u0438\u0440{3 -&gt; 4} \u043f\u043e\u043a\u0438\u043d\u0443\u043b \u0430\u0432\u0442\u043e\u0431\u0443\u0441.<br \/>  \u041f\u0430\u0441\u0441\u0430\u0436\u0438\u0440{4 -&gt; 5} \u0441\u0435\u043b \u0432 \u0430\u0432\u0442\u043e\u0431\u0443\u0441.<br \/>  \u041e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u2116 5<br \/>  \u041f\u0430\u0441\u0441\u0430\u0436\u0438\u0440{1 -&gt; 5} \u043f\u043e\u043a\u0438\u043d\u0443\u043b \u0430\u0432\u0442\u043e\u0431\u0443\u0441.<br \/>  \u041f\u0430\u0441\u0441\u0430\u0436\u0438\u0440{2 -&gt; 5} \u043f\u043e\u043a\u0438\u043d\u0443\u043b \u0430\u0432\u0442\u043e\u0431\u0443\u0441.<br \/>  \u041f\u0430\u0441\u0441\u0430\u0436\u0438\u0440{4 -&gt; 5} \u043f\u043e\u043a\u0438\u043d\u0443\u043b \u0430\u0432\u0442\u043e\u0431\u0443\u0441.<br \/>  \u041f\u0430\u0441\u0441\u0430\u0436\u0438\u0440{4 -&gt; 5} \u043f\u043e\u043a\u0438\u043d\u0443\u043b \u0430\u0432\u0442\u043e\u0431\u0443\u0441.<br \/>  \u0410\u0432\u0442\u043e\u0431\u0443\u0441 \u0443\u0435\u0445\u0430\u043b \u0432 \u043f\u0430\u0440\u043a.  <\/div>\n<\/div>\n<p>  <\/div>\n<\/div>\n<p>  \u041a\u0441\u0442\u0430\u0442\u0438, \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u043e\u043c \u0444\u0430\u0437\u0435\u0440\u0430 \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u0443 CountDownLatch.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437 CountDownLatch \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Phaser<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\">import java.util.concurrent.Phaser;  public class NewRace {     private static final Phaser START = new Phaser(8);     private static final int trackLength = 500000;      public static void main(String[] args) throws InterruptedException {         for (int i = 1; i &lt;= 5; i++) {             new Thread(new Car(i, (int) (Math.random() * 100 + 50))).start();             Thread.sleep(1000);         }          Thread.sleep(1000);         System.out.println(&quot;\u041d\u0430 \u0441\u0442\u0430\u0440\u0442!&quot;);         START.arriveAndDeregister();         Thread.sleep(1000);         System.out.println(&quot;\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435!&quot;);         START.arriveAndDeregister();         Thread.sleep(1000);         System.out.println(&quot;\u041c\u0430\u0440\u0448!&quot;);         START.arriveAndDeregister();     }      public static class Car implements Runnable {         private int carNumber;         private int carSpeed;          public Car(int carNumber, int carSpeed) {             this.carNumber = carNumber;             this.carSpeed = carSpeed;         }          @Override         public void run() {             try {                 System.out.printf(&quot;\u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u2116%d \u043f\u043e\u0434\u044a\u0435\u0445\u0430\u043b \u043a \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u043e\u0439 \u043f\u0440\u044f\u043c\u043e\u0439.\\n&quot;, carNumber);                 START.arriveAndDeregister();                 START.awaitAdvance(START.getPhase());                 Thread.sleep(trackLength \/ carSpeed);                 System.out.printf(&quot;\u0410\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c \u2116%d \u0444\u0438\u043d\u0438\u0448\u0438\u0440\u043e\u0432\u0430\u043b!\\n&quot;, carNumber);             } catch (InterruptedException e) {             }         }     } }<\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<hr\/>\n<p>  \u0415\u0441\u043b\u0438 \u043a\u043e\u043c\u0443-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u043b\u043e\u0441\u044c, \u0442\u043e \u044f \u043e\u0447\u0435\u043d\u044c \u0440\u0430\u0434=)<\/p>\n<p>  \u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e Phaser <a href=\"https:\/\/habrahabr.ru\/post\/117185\/\">\u0437\u0434\u0435\u0441\u044c<\/a>.<br \/>  \u041f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0435\u0449\u0451 \u043e \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0442\u043e\u0440\u0430\u0445 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043c\u043e\u0436\u043d\u043e <a href=\"http:\/\/www.quizful.net\/post\/java-parallel-tools\">\u0437\u0434\u0435\u0441\u044c<\/a>.<br \/>  \u041e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u043e\u0431\u0437\u043e\u0440 java.util.concurrent \u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 <a href=\"https:\/\/habrahabr.ru\/company\/luxoft\/blog\/157273\/\">\u0437\u0434\u0435\u0441\u044c<\/a>.               <\/p>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habrahabr.ru\/post\/277669\/\"> https:\/\/habrahabr.ru\/post\/277669\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>       \u0426\u0435\u043b\u044c\u044e \u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u0432 \u0438\u0437 \u043f\u0430\u043a\u0435\u0442\u0430 java.util.concurrent. \u041f\u0438\u0448\u0443 \u0435\u0451, \u043f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e, \u043a\u0430\u043a \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u043b\u0435\u0433\u0447\u0438\u0442 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u0432 \u0442\u0435\u043c\u0443 \u0438 \u043f\u043e\u043a\u0430\u0436\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0434\u043b\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0438\u0442\u0435\u0439.<\/p>\n<p>  \u0412 java.util.concurrent \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0443 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430 \u0433\u0440\u0443\u043f\u043f\u044b: Concurrent Collections, Executors, Atomics \u0438 \u0442.\u0434. \u041e\u0434\u043d\u043e\u0439 \u0438\u0437 \u044d\u0442\u0438\u0445 \u0433\u0440\u0443\u043f\u043f \u0431\u0443\u0434\u0435\u0442 Synchronizers (\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0442\u043e\u0440\u044b).<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/303\/865\/e0e\/303865e0e58b4514863ca687a498d9cd.png\"\/><\/p>\n<p>  <b>\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0442\u043e\u0440\u044b<\/b> \u2013 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u0434\u043b\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0438\u0442\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0430\u044e\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443 \u0440\u0435\u0433\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\/\u0438\u043b\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u043d\u0438\u0442\u0435\u0439 \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438, \u0447\u0435\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u044b \u044f\u0437\u044b\u043a\u0430 (\u043c\u043e\u043d\u0438\u0442\u043e\u0440\u044b).  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-274979","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/274979","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=274979"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/274979\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=274979"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=274979"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=274979"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}