2011-01-11 8 views

Respuesta

12

Si es posible, use Joda Time. Sus analizadores de fecha/hora son seguros para la ejecución de subprocesos y, en general, es más API más agradable que Date/Calendar.

Usted puede uso sólo sus analizadores y luego convertir los valores de retorno a Date, pero personalmente recomendaría el uso de toda la biblioteca en su lugar.

1

¿Por qué no poner la llamada de SimpleDateFormat.parseObject() en su propio bloque synchronized?

1

Se encontró solution.

public class ThreadSafeSimpleDateFormat { 

private DateFormat df; 

public ThreadSafeSimpleDateFormat(String format) { 
    this.df = new SimpleDateFormat(format); 
} 

public synchronized String format(Date date) { 
    return df.format(date); 
} 

public synchronized Date parse(String string) throws ParseException { 
    return df.parse(string); 
} 
} 
+0

que pueden no funcionar bien, pero es fácil. El rendimiento dependerá de cuántos hilos realmente intenten acceder al formateador al mismo tiempo. Intentaría esto (o simplemente ajustando tus llamadas a SimpleDateFormat en un bloque de sincronización) primero para ver si realmente es un problema. – AngerClown

8

Como se indica en this post usted puede sincronizar, uso de hilo o locales Joda-Time.

Por ejemplo, utilizando ThreadLocals:

public class DateFormatTest { 

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

    public Date convert(String source) 
        throws ParseException{ 
    Date d = df.get().parse(source); 
    return d; 
    } 
} 
+1

+1 Sin bloqueo. Memoria comercial para seguridad de hilos. No hay una gran biblioteca externa para el caso simple. – shellholic

+1

Su respuesta es una víctima colateral de una bomba de gran reputación. – shellholic