Избегайте Timer
класса в сервлетах
При работе в среде веб-приложения не используйте класс Timer. Поищите в StackOverflow, чтобы узнать, почему.
ScheduleExpression
Согласно учебнику по Oracle, ScheduleExpression может быть установлен для первого месяцев. Похоже, этому классу требуется контейнер EJB. EJB является излишним для многих людей, включая меня и мою работу, поэтому я не знаком с этим классом.
ScheduledExecutorService
Другой путь без полного EJB и Java EE — это семейство классов/интерфейсов Executor. См. учебник. В частности, обратите внимание на ScheduledExecutorService.
Я бы запланировал это ежедневно, чтобы задача проверялась на текущую дату. Если не первое число месяца, ничего не делайте, и эта задача будет завершена. Завтра новая задача снова проверит дату и так далее.
Обязательно прочитайте документ и выполните поиск этого класса в StackOverflow, чтобы узнать больше. Одна хитрость заключается в том, что ваш запланированный код не может генерировать никаких исключений, иначе ScheduledExecutorService молча остановится. Так что поместите try-catch вокруг вашего кода.
Для среды веб-приложений (только сервлеты, или веб-профиль Java EE, или полная версия Java EE) используйте ServletContextListener для обнаружения во время выполнения запуска веб-приложения и, таким образом, запустите свой ScheduledExecutorService. Точно так же вы можете отключиться. Опять же, поищите в StackOverflow, так как это было описано ранее.
Проверяйте ежедневно
Вы можете попытаться рассчитать количество времени до следующего первого месяца, но зачем? Быстрая проверка на сегодняшнюю дату практически не влияет на ваш сервер, значительно упрощает ваш код и позволяет избежать возможных ошибок из-за ваших просчетов. Это совет для реального мира; возможно, целью вашего домашнего задания является вычисление даты.
Еще один практический совет: избегайте классов java.util.Date/.Calendar, так как они, как известно, хлопотны, сбивают с толку и имеют недостатки. Вместо этого используйте либо библиотеку Joda-Time, либо пакет java.time, встроенный в Java 8 (вдохновленный Joda-Time).
person
Basil Bourque
schedule
17.11.2014
new Date()
, см. stackoverflow.com/questions/9629636/get-todays-date-in-java ), и если день равен 1, сделайте свои расчеты. Удачного кодирования :) -Чарли - person Charlie   schedule 17.11.2014