SimpleDateFormat est connu pour être dangereux pour les threads, provoquant des problèmes potentiels lorsque plusieurs threads accèdent simultanément à la même instance. Explorons les raisons de cette limitation et les différences par rapport à son homologue thread-safe, FastDateFormat.
SimpleDateFormat maintient l'état interne dans les variables d'instance, y compris un objet Calendrier. Lorsque plusieurs threads tentent d'accéder à la même instance, ils peuvent écraser les résultats intermédiaires les uns des autres, provoquant une corruption.
Par exemple, la méthode parse initialise l'objet Calendar, mais si un autre thread appelle parse avant la fin du premier, cela réinitialisera le calendrier, affectant les résultats du premier fil de discussion.
FastDateFormat a été introduit en remplacement de SimpleDateFormat, répondant aux problèmes de sécurité des threads. Contrairement à SimpleDateFormat, FastDateFormat stocke son état dans des variables locales de thread, garantissant que chaque thread possède sa propre instance indépendante.
En utilisant ThreadLocal, FastDateFormat garantit qu'aucun conflit ne se produit lorsque plusieurs threads accèdent à l'objet de format.
Considérez le code suivant pour démontrer le problème de sécurité des threads dans SimpleDateFormat :
import java.text.SimpleDateFormat; public class SimpleDateFormatThreadSafety { public static void main(String[] args) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Thread thread1 = new Thread(() -> { try { System.out.println(sdf.parse("2023-03-08")); } catch (Exception e) { e.printStackTrace(); } }); Thread thread2 = new Thread(() -> { try { System.out.println(sdf.parse("2024-04-16")); } catch (Exception e) { e.printStackTrace(); } }); thread1.start(); thread2.start(); } }
L'exécution de ce code peut entraîner une analyse de date incohérente ou incorrecte, en raison du fait que les threads accèdent simultanément à la même instance SimpleDateFormat.
Pour garantir un formatage de date sécurisé pour les threads, suivez ces recommandations :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!