У меня есть долгоживущее серверное приложение, которое разработано для работы с минимальным временем простоя (например, круглосуточная остановка работы только для обслуживания).Приложение должно иметь возможность обрабатывать тысячи запросов в секунду, поэтому производительность является проблемой.
Для обслуживания каждого запроса.часть приложения должна знать текущую дату (хотя не время) и должна храниться в объекте java.util.Date
из-за стороннего API.
Однако, объекты Date
дорогичтобы конструировать так, создание нового для каждого запроса не имеет смысла.
Разделение объекта Date
между запросами и его обновление один раз в день означало бы, что должен быть создан только один объект (на серверрабочий поток) при запуске, но тогда как вы можете обновить его безопасным способом?
Например, использование ScheduledExecutorService
, которое запускается сразу после полуночи, может увеличить Date
, но вводит синхронизацию потока вmix: объект Date
теперь используется совместно основным потоком и потоком, который ScheduledExecutorService
порождает для запуска задачи обновления.
Синхронизация двух потоков приводит к еще одной головной боли для производительности из-за вероятности конфликта на общем ресурсе между тысячами обслуживаемых запросов (однократное выполнение потока обновления в день менее важно, поскольку оно толькопроисходит один раз в день, в отличие от миллионов запросов, которые мы будем обслуживать ежедневно).
Итак, мой вопрос Какой самый эффективный способ гарантировать, что приложение всегда знает текущую дату, даже когдаработает непрерывно в течение нескольких недель подряд?