DateFormat Class es una clase de seguridad no tensas. El documento de Javadocs mencionó que "los formatos de fecha no se pueden sincronizar. Recomendamos crear un formato de fecha independiente para cada hilo. Si múltiples hilos acceden a un formato de fecha al mismo tiempo, esto debe agregar bloques de código sincrónicos al exterior".
El siguiente código nos muestra cómo usar DateFormat en un entorno de subprocesos para convertir la fecha de la cadena en el objeto Date. Crear un ejemplo para obtener el formato de fecha es más eficiente, porque el sistema no necesita obtener idiomas y países locales muchas veces.
Clase pública dateFormattest {Formato de formato final privado = new SimpleDateFormat ("yyyymmdd");
Este código no es el hilo. Podemos llamarlo a través de múltiples hilos. En el siguiente código, creé un grupo de subprocesos con dos hilos y envié tareas de conversión de 5 fechas.
Final DateFormattest t = new DateFormattest (); caso de un hilo. .out.println (result.get cure);}
El resultado de la operación del código no es como deseamos a veces, genera la fecha correcta y, a veces, los errores de salida (como .sat 31 de julio 00:00:00 BST 2012), ¡a veces incluso lanzando NumberFormateException!
Cómo usar la clase DateFormat simultáneamente
Podemos tener múltiples métodos para usar la clase DateFormat cuando Hide Security.
1. Síncrono
La forma más fácil es bloquear el objeto DateFormat antes de la conversión de la fecha. Este método permite que solo un hilo acceda al objeto DateFormat a la vez, mientras que otros subprocesos solo pueden esperar.
Public Date Convert (String Source) lanza ParseException {sincronizado (formato) {date d = format.pars (fuente);
2. Use ThreadLocal
Otro método es utilizar la variable ThreadLocal para acomodar el objeto DateFormat, lo que significa que cada hilo tiene una copia que pertenece a la suya y no es necesario esperar a que otros hilos lo liberen. Este método será más eficiente que usar bloques sincrónicos.
Clase pública dateFormattest {private static final ThreadLocal <df = new ThreadLocal <DateFormat> () {{@Override DateFormat () () return New SimpleFormat ("yyyymmdd");}}; Fecha d = df.get ().
3. Joda-tiempo
Joda Time es una gran fecha de código abierto JDK y una alternativa de API de calendario.
Importar org.joda.time.datetime; convert (fuente de cadena) {DateTime d = fmt.ParsedateTime (fuente);