2012-05-02 14 views
8
Synchronization 

Date formats are not synchronized. It is recommended to create separate format instances for each thread. If multiple threads access a format concurrently, it must be synchronized externally 

La línea anterior se menciona en la clase JavaDoc de SimpleDateFormat.java.text.SimpleDateFormat no es seguro

Significa que no debemos crear los objetos SimpleDateFormat como estáticos.

Y si lo creamos como estático, entonces donde sea que estemos usando este objeto debemos mantenerlo en Bloque sincronizado.

+2

sí, usted es correcto –

+2

El nuevo 'java.time.format.DateTimeFormatter' (de Java 1.8)" es inmutable y seguro para subprocesos ". Eche un vistazo a: https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html – Linuslabo

Respuesta

14

Sí SimpleDateFormat no es hilo de seguridad y también se recomienda cuando se está analizando fecha en que debe acceder de manera sincronizada.

public Date convertStringToDate(String dateString) throws ParseException { 
    Date result; 
    synchronized(df) { 
     result = df.parse(dateString); 
    } 
    return result; 
} 

otra manera está en http://code.google.com/p/safe-simple-date-format/downloads/list

21

Eso es cierto. Ya puede encontrar preguntas sobre este tema en StackOverflow. Yo uso para declarar como ThreadLocal:

private static final ThreadLocal<DateFormat> THREAD_LOCAL_DATEFORMAT = new ThreadLocal<DateFormat>() { 
    protected DateFormat initialValue() { 
     return new SimpleDateFormat("yyyyMMdd"); 
    } 
}; 

y en el código:

DateFormat df = THREAD_LOCAL_DATEFORMAT.get(); 
9

Eso es correcto. FastDateFormat de Apache Commons Lang es una buena alternativa segura para hilos.

Desde la versión 3.2 es compatible también con el análisis, antes del formato solo 3.2.