В Java существует множество способов создания «фонового потока». Я хочу выделить ровно один поток, который продолжает работать в фоновом режиме. Для этого я использую ScheduledExecutorService.
Я хочу, чтобы этот поток выполнялся с фиксированным интервалом в 2 секунды (между последовательными выполнениями). Этот поток выполняет сетевой вызов службы с общим тайм-аутом в 1 секунду.
Насколько я понимаю, указание приоритета потока является поведением, зависящим от ОС, и представляет собой просто предложение для ОС установить приоритет этого потока над другими потоками в системе.
Вопрос
- Какова гарантия того, что мой поток будет продолжать выполняться через регулярные промежутки времени (по крайней мере, раз в 3 секунды), несмотря на резкое увеличение загрузки ЦП (скажем, >= 70%)?
- Можно ли это гарантировать? Это вопрос, зависящий от платформы? Удалим этот вопрос, чтобы сделать этот вопрос более сосредоточенным на самом главном.
Некоторые подробности о характеристиках фонового потока:
- Большая часть времени потока будет проводиться в выполнение блокирующего вызова REST API с использованием JAX-RS с реализацией JerseyClient.
- Оставшееся время тратится на дешевую работу по обработке, которая включает обработку ответа JSON размером < 1 КБ и обновление входного файла. Memory HashMap.
- Этот поток будет выполняться в веб-приложении, обрабатывающем запросы в кластере AWS ECS (включено автоматическое масштабирование) – а мы не хотели бы процессор превысит 70%. Он поднимется выше 70% только из-за неожиданного всплеска, который случается крайне редко.
- Если поток задерживается более чем на 3 секунды один раз из примерно 1000 раз (срабатывает в 99,9% раз), он должно быть в порядке. Поэтому мне не нужно, чтобы он работал в режиме реального времени (100%).
Подробнее здесь: https://stackoverflow.com/questions/789 ... on-in-java
Мобильная версия