Удаление static
не делает его потокобезопасным: экземпляры могут быть доступны из отдельных потоков одновременно.
Попробуйте использовать ThreadLocal<SimpleDateFormat>
:
private static final ThreadLocal<SimpleDateFormat> DATE_KEY_FORMAT =
ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyyMMdd"));
, а затем получить доступ в статических методах следующим образом:
return Integer.parseInt(DATE_KEY_FORMAT.get().format(new Date()));
Поскольку каждый поток получает свой собственный экземпляр SimpleDateFormat
, между потоками нет помех.
Однако изменения в SimpleDateFormat
(например, установка часового пояса) будут сохраняться в данном потоке до тех пор, пока вы не вызовете DATE_KEY_FORMAT.remove()
. Но если вы никогда не вносите такие изменения в экземпляр, вам не нужно об этом беспокоиться.