2011-01-11 14 views
9

मैं SimpleDateFormat के लिए थ्रेड-सुरक्षित प्रतिस्थापन की तलाश में हूं। parseObject अच्छे पुराने FastDateFormat पर लागू नहीं किया गया है और केवल एक त्रुटि फेंकता है। कोई विचार? मुझे कुछ भी फैंसी, थ्रेड-सुरक्षा और इस पैटर्न को संभालने की क्षमता की आवश्यकता नहीं है: "yyyy-MM-dd"थ्रेड-सुरक्षित दिनांक पार्सर

उत्तर

12

यदि संभव हो, तो Joda Time का उपयोग करें। इसकी दिनांक/समय पार्सर्स थ्रेड-सुरक्षित हैं, और यह आमतौर पर Date/Calendar से nicer API है।

आप कर सकते हैं उपयोग सिर्फ अपनी पारसर्स और फिर Date के लिए वापसी मान परिवर्तित, लेकिन व्यक्तिगत रूप से मैं बजाय पूरे लाइब्रेरी का उपयोग कर की सिफारिश करेंगे।

1

SimpleDateFormat.parseObject() को अपने synchronized ब्लॉक में क्यों न डालें?

1

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

जो अच्छा प्रदर्शन नहीं कर सकते हैं, लेकिन यह आसान है। प्रदर्शन इस बात पर निर्भर करेगा कि एक ही समय में कितने थ्रेड फॉर्मेटर तक पहुंचने की कोशिश कर रहे हैं। मैं यह कोशिश करने के लिए कोशिश करता हूं (या सिर्फ सिंक ब्लॉक में अपनी कॉल को सरलडेटाफॉर्मेट में लपेटता हूं) यह देखने के लिए कि यह वास्तव में एक मुद्दा है या नहीं। – AngerClown

8

this post में दिखाया गया है या तो आप सिंक्रनाइज़ कर सकते हैं, उपयोग धागा स्थानीय लोगों या Joda समय।

उदाहरण के लिए, का उपयोग कर 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 कोई अवरुद्ध नहीं। धागा सुरक्षा के लिए व्यापार स्मृति। सरल मामले के लिए कोई बाहरी बड़ी पुस्तकालय नहीं। – shellholic

+1

आपका उत्तर एक उच्च प्रतिष्ठा बम का एक संपार्श्विक शिकार है। – shellholic

संबंधित मुद्दे