2012-05-02 15 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 

उपरोक्त पंक्ति का वर्णन सरलDateFormat क्लास के जावाडॉक में किया गया है।java.text.SimpleDateFormat थ्रेड सुरक्षित नहीं

यह मतलब यह है कि हम स्थिर रूप SimpleDateFormat वस्तुओं नहीं बनाना चाहिए।

और हम स्थिर के रूप में बनाना है, तो जहाँ भी हम इस वस्तु का उपयोग कर रहे हम समन्वयित ब्लॉक में रखने के लिए की जरूरत है।

+2

हाँ आप सही –

+2

नई 'java.time.format.DateTimeFormatter' (जावा 1.8 से)" अपरिवर्तनीय और धागे की सुरक्षित है "कर रहे हैं। एक नज़र डालें: https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html – Linuslabo

उत्तर

14

हाँ SimpleDateFormat सुरक्षित थ्रेड नहीं है और यह भी सिफारिश की है जब आप इसे सिंक्रनाइज़ ढंग से पहुंचना चाहिए तारीख को पार्स कर रहे हैं।

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

एक अन्य तरीके से

21

यह सच है। आप StackOverflow पर इस समस्या से संबंधित पहले से ही प्रश्न पा सकते हैं। मैं ThreadLocal के रूप में यह घोषणा करने के लिए उपयोग करें:

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

और कोड में:

DateFormat df = THREAD_LOCAL_DATEFORMAT.get(); 
संबंधित मुद्दे