El javadoc para SimpleDateFormat indica que SimpleDateFormat no está sincronizado.
"Los formatos de fecha no están sincronizados. Se recomienda crear instancias de formato independientes para cada subproceso. Si varios subprocesos acceden a un formato al mismo tiempo, debe sincronizarse externamente".
Pero, ¿cuál es el mejor enfoque para usar una instancia de SimpleDateFormat en un entorno de subprocesos múltiples? Aquí hay algunas opciones en las que he pensado, he usado las opciones 1 y 2 en el pasado, pero tengo curiosidad por saber si hay mejores alternativas o cuál de estas opciones ofrecería el mejor rendimiento y concurrencia.
Opción 1: crear instancias locales cuando sea necesario
public String formatDate(Date d) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.format(d);
}
Opción 2: Cree una instancia de SimpleDateFormat como una variable de clase pero sincronice el acceso a ella.
private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
public String formatDate(Date d) {
synchronized(sdf) {
return sdf.format(d);
}
}
Opción 3: cree un ThreadLocal para almacenar una instancia diferente de SimpleDateFormat para cada hilo.
private ThreadLocal<SimpleDateFormat> tl = new ThreadLocal<SimpleDateFormat>();
public String formatDate(Date d) {
SimpleDateFormat sdf = tl.get();
if(sdf == null) {
sdf = new SimpleDateFormat("yyyy-MM-hh");
tl.set(sdf);
}
return sdf.format(d);
}