Делает awaitTermination() делает сон программы

class SomeClass {

 void go() {

 //do stuff
shutdownAndAwaitTermination(pool);

System.exit(0);

    }    

public void shutdownAndAwaitTermination(ExecutorService pool) {
        pool.shutdown(); 
        try {
            logger.log(Level.INFO, "Waiting for existing tasks to terminate");
            if (!pool.awaitTermination(60, TimeUnit.SECONDS)) {
                pool.shutdownNow();

                if(!pool.awaitTermination(60, TimeUnit.SECONDS)) {
                    logger.log(Level.SEVERE, "  ERROR: pool did not terminate");
                }
            }   
        } catch (InterruptedException ie) {
             // (Re-)Cancel if current thread also interrupted
             pool.shutdownNow();
             // Preserve interrupt status
             Thread.currentThread().interrupt(); 
           }
       }

  }//end class

Я пытаюсь закрыть свой бассейн безопасно и изящно, не рискуя никогда не закончить. Мне нужно кое-что понять от вас, эксперты 8-). Когда я звоню shutdownAndAwaitTermination()Я запуталась if (!pool.awaitTermination(60, TimeUnit.SECONDS)) блок. Когда эта строка ожидает в методе go(), приложение ждет 60 секунд, прежде чем существовать из системы (ждать завершения)?

2) Можете ли вы объяснить, что происходит в блоке catch?

1 ответ

1) Нет, он будет ждать максимум 60 секунд, но может также вернуться через 30 секунд, если все задачи завершены.

2) Если текущий поток был прерван, вы приказываете пулу thred завершить работу, оставляя выполнение задач выполненным. Чем вы прервите снова, чтобы сохранить свойство потока

Другие вопросы по тегам