7 июля 2023 1035
Продолжаем разбор вопросов из Java-сертификации от Учебного центра IBS вместе с Игорем Судакевичем, сертифицированным Java-разработчиком, уполномоченным инструктором корпорации Oracle и платформы Udemy, Java-методистом c 15-летним опытом. В этой статье мы рассмотрим применение Threads и Executors и поможем вам подготовиться к тестированию.

Допустим, вопрос касается создания потоков (также известных как «подпроцессы», threads) на базе интерфейсов Runnable и Callable. Кроме того, планируется, что управлять исполнением задач в многопоточном режиме будет объект ExecutorService. Итак:


photo_2023-07-07_10-33-43.jpg


Каков результат? Выбрать два ответа:

A. Severe Info Warning

B. Severe Warning Info

C. Severe Severe Info

D. Severe Info

Несмотря на то, что в вопросе отсутствуют import-директивы, это не значит, что предложенный код не скомпилируется. И если в тексте вопроса отсутствуют указания на импорты дата-типов, это значит, что все необходимые импорты на месте и код успешно компилируется и запускается. Другое дело, что на этапе исполнения могут вылетать исключения, но наш пример должен отработать штатно.

На экзамен уровня «Продвинутый» вынесены подтемы из раздела Concurrency, касающиеся утилитарного класса Executors и интерфейса ExecutorService. Кроме того, экзамен активно интересуется пулами потоков, которые имплементируют интерфейс ExecutorService.

В первых версиях Java на программиста возлагалась ответственность за создание и управление жизненным циклом потоков. Поскольку создание thread'ов ограничено ресурсами операционной системы, была придумана концепция пула потоков («thread pool»), чтобы набор thread'ов мог обслуживать куда больше исполняемых фоновых задач. Другими словами, вместо того чтобы для каждой задачи создавать отдельный поток и затем разрушать его, можно заранее создать несколько thread'ов и настроить их так, чтобы они могли принимать и исполнять «заказы» (например, Runnable-объектов). Поток, приостанавливающий такой «заказ», исполнит его и по завершении вернется в пул, где ему могут поручить очередной «заказ», и так далее.

Готовые решения для thread-пулов появились в Java API с выходом «пятерки». Интерфейсы Executor и ExecutorService представляют собой генерализацию thread-пулов и поддерживаемых видов взаимодействий. Кроме того, ряд имплементаций ExecutorService можно инстанцировать с помощью класса Executors, где содержится набор соответствующих фабричных методов. Эти три дата-типа расположены в пакете java.util.concurrent наряду с другими высокоуровневыми классами и интерфейсами, призванными помочь разработчику с решением проблем многопоточного программирования.

В то время как базовый интерфейс Executor предназначен для исполнения задач, описанных в объектах, являющихся имплементаторами интерфейса Runnable, на практике мы чаще используем ExecutorService, представляющий собой дочерний интерфейс Executor'а, поскольку ExecutorService дает нам дополнительную возможность исполнять Callable-задачи и прекращать прием задач для всего пула. Напомним, что интерфейс Callable предполагает возвращение некого результата, который будет асинхронно получен подпроцессом, являющимся инициатором исполнения задания.

Интересно отметить, что ни Executor, ни ExecutorService не предписывают специфическую стратегию исполнения задач. Одни имплементации ведут многопоточную обработку в пуле фиксированного размера, приводя порой к появлению очередей из задач, поджидающих, когда наконец высвободится очередной thread. Другие имплементации умеют самостоятельно создавать рабочие потоки по мере повышения нагрузки и даже «подчищать за собой», когда необходимость в добавочных thread'ах исчезает. Есть и имплементация, где задачи исполняются строго последовательно, поскольку на все про все выделяется один-единственный thread. Какую стратегию взять, зависит от конкретной прикладной области, поэтому разработчик должен проанализировать архитектуру и потребности приложения.

Вышеперечисленные стратегии реализованы в следующих фабричных методах утилитарного класса Executors:

  • newFixedThreadPool(int nThreads)
  • newCachedThreadPool()
  • newSingleThreadExecutor()

Первые два создают пулы с несколькими рабочими потоками, метод newSingleThreadExecutor() возвращает сервис, который обсчитывает задачи строго по очереди в одном-единственном thread'е.

Мы видим, что в нашем примере задействован кеширующий, динамический пул. Эта разновидность экзекьютора порождает новые рабочие thread'ы и разрушает их, когда поток остается незадействованным в течение 60 секунд. У такого пула есть и недостаток: отсутствие потолка для числа создаваемых thread'ов. Это может вызвать чрезмерное потребление ресурсов и, как следствие, деградацию эксплуатационных характеристик приложения под высокой нагрузкой.

У нас есть целый ряд задач для обсчета и есть основания ожидать, что пул из нашего вопроса будет содержать несколько thread'ов в многопоточном режиме. Вот почему отсутствует гарантия, что задача будет досчитана первой по счету, второй и так далее, причем вне зависимости от порядка их запуска на исполнение. Другими словами, невозможно заранее сказать, в какой последовательности будут печататься сообщения в консоли. Отсюда следует, что правильными ответами будут варианты A и B.

Отметим, что ExecutorService выполняет порученную задачу однократно. Мы не можем исключить, что исполнение закончится аварийно или задача вообще не поступит на обработку, потому что пул к этому времени окажется закрыт. Однако обсчет задачи происходит лишь один раз. Мы не увидим дублированных сообщений, поэтому вариант C является ошибочным.

Теперь поподробнее о методе shutdown(). После его вызова ExecutorService не станет принимать новые поручения, но запущенные задачи будут досчитаны до конца. Отсюда получаем, что, если мы поручили пулу три задачи и затем вызвали shutdown(), в случае штатного завершения в консоли появятся все три сообщения. Поскольку вариант D перечисляет только два сообщения и не упоминает вылет какого-либо исключения, мы приходим к выводу, что опция D тоже является ошибочной.

А что, если какая-то задача обсчитывается настолько долго, что мы вылетим за границу таймаута в 15 секунд после требования закрыть пул? Ведь в этом случае мы не увидим все три сообщения, верно?

В этом случае, во-первых, вообще крайне мала вероятность, что простенькая задача вывести сообщение в консоль потребует столь долгого времени. Во-вторых, вопрос просил указать два варианта, и опции A и B выглядят абсолютно естественными, не требуют никаких натяжек, оговорок и экзотических корнер-кейсов с микроскопически малыми шансами для реализации.

К такому сценарию мы можем отнести ситуацию, когда ядро операционной системы на сервере обрывает работу виртуальной машины из-за сверхсрочной необходимости установить некий апдейт или патч безопасности в условиях отчаянного дефицита ресурсов, но на нашем экзамене все эти обстоятельства были бы описаны в явном виде. Поскольку любой поток в thread-пуле является недемоническим, виртуальная машина не может по своей воле оборвать его исполнение принудительно. Вот почему программа должна отработать до конца и вывести в консоль все три сообщения, пусть даже в непредсказуемом порядке.

Хотите пройти сертификацию по Java в Учебном центре IBS?

Учебный центр IBS предлагает программу сертификации по Java, которая поможет вам достичь ваших целей и повысить свою квалификацию. Пройдя сертификацию по Java в Учебном центре IBS, вы получите не только официальное признание ваших знаний, но и уверенность в своих навыках. Программа разработана экспертами в области Java и покрывает все основные аспекты языка, включая синтаксис, объектно-ориентированное программирование, коллекции, многопоточность и многое другое. Следите за расписанием сертификаций и начните свой путь к успеху уже сегодня!

Последние статьи в блоге

ИИ против джуна: как победить нейросети при устройстве на работу

Начинающим разработчикам и раньше было непросто найти первую работу, а сейчас и подавно: конкуренция выросла кратно, а рынок окончательно стал «рынком работодателя».

11 марта 2026

Мартовский апгрейд: обновляем компетенции со скидкой 20% и приятными бонусами

Март — традиционное время не только для обновления природы, но и для профессионального роста. С 1 по 31 марта 2026 года у нас действует акция «Мартовский апгрейд».

05 марта 2026

Февраль 2026: Разбираем тренды, прокачиваем архитектуру и учимся договариваться с ИИ. Бесплатные вебинары для ИТ-специалистов

Февраль — месяц, когда уже видны цели на год, но еще есть время скорректировать курс и зарядиться новыми знаниями.

Новости
06 февраля 2026

Как ИТ-компании могут компенсировать до 10 млн ₽ на обучении сотрудников в 2026 году

Как аккредитованный учебный центр, специализирующийся на подготовке ИТ-специалистов, мы не только проводим программы дополнительного профессионального образования, но и помогаем корпоративным клиентам корректно оформить документы для участия в программе «Субсидия на обучение сотрудников» Департамента предпринимательства и инновационного развития города Москвы. В этой статье — структурированный обзор условий, требования к компаниям и сотрудникам, а также как мы можем помочь вам при подаче заявки.

Жизнь компании
20 января 2026

Архитекторы vs Рутина: Как открытый вебинар за 2 недели превратился в кастомный ИИ-интенсив

В Учебном центре IBS мы регулярно проводим бесплатные вебинары для ИТ-специалистов. Это наша философия — делиться реальными знаниями, а не просто давать рекламу. Один из таких вебинаров, посвященный практическому применению ИИ в инженерии, посетили сотрудники крупной компании — лидера в спортивном ритейле.

12 января 2026

Чистая выдумка: Как придумать класс, которого нет, и спасти проект от хаоса

Знакомо: вы описываете требования, рисуете сущности — Клиент, Заявка, Документ… А потом система превращается в «комок» с сильной связанностью (big ball of mud), где любое изменение стоит как полпроекта?

Новости
16 декабря 2025

Федеральное признание: нашу программу по системному анализу признали лучшей ИТ-программой в стране

Программа Учебного центра IBS «Системный аналитик. Уровень Специалист» признана лучшей ИТ-программой онлайн-обучения в России по итогам премии «СМАРТ ПИРАМИДА — 2025»!

16 декабря 2025

Бизнес-аналитик 2.0: как меняется профессия и какие навыки теперь нужны

Когда-то бизнес-аналитик ассоциировался с человеком, который «пишет ТЗ». Сегодня этого явно недостаточно. Современный БА — это стратег, коммуникатор и системный мыслитель, который одинаково уверенно чувствует себя в бизнес-контексте и технических деталях. Чтобы не застрять в прошлом, важно понимать, как эволюционирует роль аналитика и какие компетенции становятся критически важными.

Новости
05 декабря 2025

Обратная сторона Event-Driven: Почему Мартин Фаулер призывает к осторожности?

Вы узнаете один из 4 ключевых паттернов EDA и поймете, как избежать главной ловушки, в которую попадают многие команды.

Новости
25 ноября 2025

Скидка 30% на 8 курсов декабря

Год близится к завершению, и пока другие подводят итоги, вы можете сделать самую выгодную инвестицию — в себя. Мы собрали 8 курсов со скидкой 30%*, которые стартуют в начале декабря, чтобы вы могли точно успеть пройти обучение до конца года и прийти к новым карьерным целям с обновлённым стеком технологий.

Новости
20 ноября 2025

Осенний апдейт карьеры: от -30% до -50% на курсы ноября!

Только сейчас: скидки от 30% до 50%* на ноябрьские курсы для тех, кто хочет быть на шаг впереди в IT. Практические программы помогут укрепить ключевые навыки и выйти на новый уровень профессиональной зрелости. Успейте подать заявку, чтобы воспользоваться предложением.

Новости
23 октября 2025

Как одновременно заварить кофе для 10 000 сотрудников — и еще 7 неожиданных вопросов архитектору ПО

Как убедить заказчика отказаться от Excel, зачем архитектору опыт кодинга и почему эволюция ПО похожа на эволюцию живых существ?

Новости
21 октября 2025

Как живые вебинары повышают эффективность ИТ-обучения

ИТ-рынок сегодня меняется стремительнее, чем когда-либо: появляются новые технологии, фреймворки и подходы.

Новости
06 октября 2025

ИИ в разработке ПО: преимущество или риск

Инструменты на базе искусственного интеллекта все чаще используются при создании программного обеспечения. Рассмотрим, какие задачи помогает решать ИИ и какие опасности несет

Новости
24 сентября 2025

Чему нас учит ИИ: как стать идеальным сотрудником

Сейчас чаще говорят об этике использования ИИ — как не получить плагиат или не доверить слишком много, но при этом редко задумываются о другой стороне медали: этична ли наша работа?

Новости
12 сентября 2025

Как ИИ действительно влияет на продуктивность разработчика: неожиданные выводы из исследований

За последние пару лет у многих разработчиков в редакторах и IDE поселились новые «напарники» — всевозможные ИИ-инструменты. Обещания были впечатляющие: меньше рутины, быстрее релизы, код пишется почти сам. Но когда первые восторги улеглись и появились системные исследования, стало ясно: эффект от ИИ далеко не такой однозначный. Где-то он действительно ускоряет работу команд на 20%, а где-то, наоборот, тормозит опытных инженеров. И вот парадокс: даже там, где выигрыш в скорости очевиден, бизнес не всегда чувствует, что проекты двигаются быстрее.

Новости
08 сентября 2025

Сквозная логика: от бизнес-процесса к реализации без потерь

Главный принцип работы с проектной документацией — поддерживать её связность и актуальность. Любая, даже самая детальная схема (BPMN, Use Case, C4), мгновенно теряет ценность, если она конфликтует с другой. Узнаёте? Сначала все силы бросают на «личный кабинет», но после пары спринтов главным внезапно становятся «возвраты». В результате возникает опасный разрыв: цели проекта, реализуемый функционал и схемы, которые должны их описывать, живут своей жизнью. Документация превращается в «мёртвые зоны», которые больше не отражают реальность.

29 августа 2025

Заказная разработка ПО в IBS: безопасная разработка и доставка

В этой статье начальник отдела DevOps компании IBS Артур Галеев расскажет об опыте внедрения принципов безопасной разработки, используемых инструментах и нормативных актах, на которые стоит опираться.

Новости
26 августа 2025

Сертификация ИТ-специалистов: точная оценка ваших компетенций

В ИТ-мире важно не просто обладать знаниями, но и четко понимать свой реальный уровень владения теми или иными навыками.

Новости
22 августа 2025

Группа компаний IBS запускает национальную сертификацию для бизнес-аналитиков

Центр сертификации IBS запускает новую систему оценки квалификации бизнес-аналитиков, которая сочетает международные стандарты c особенностями российского рынка. Программа ориентирована на теоретическую базу и прикладные навыки, необходимые в работе бизнес-аналитика в современных ИТ- и цифровых проектах.

Жизнь компании
20 августа 2025

Нужна помощь? Оставьте заявку, и мы свяжемся с вами в ближайшее время

Согласен получать на e-mail информационные рассылки о новостях компании IBS Training
Корпоративное обучение Оценка персонала Сертификация О нас Стань тренером Блог Личный кабинет
Пользователь только что записался на курс ""
Спасибо!
Форма отправлена успешно.