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

Yukarıdaki satır, SimpleDateFormat sınıfının JavaDoc bölümünde belirtilmiştir.java.text.SimpleDateFormat iş parçacığı güvenli değil

Bu, SimpleDateFormat nesnelerini Statik olarak oluşturmamamız gerektiği anlamına mı geliyor?

Ve eğer biz onu statik olarak yaratırsak, bu nesneyi nerede kullanırsak, onu Senkronize Blokta tutmamız gerekir.

+2

evet doğru –

+2

Yeni "java.time.format.DateTimeFormatter" (Java 1.8'den) "değişmez ve iş parçacığı için güvenli". Şuna bir bakın: https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html – Linuslabo

cevap

14

Evet SimpleDateFormat parçacığı güvenli değil ve bunu senkronize şekilde erişmek gerekir tarihini ayrıştırma zaman o da önerilir.

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

bir başka yolu http://code.google.com/p/safe-simple-date-format/downloads/list üzerinde

21

Bu doğrudur. Bu konuyla ilgili sorularınızı StackOverflow'ta bulabilirsiniz.

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

ve kod: Ben ThreadLocal olarak ilan için kullandıkları

DateFormat df = THREAD_LOCAL_DATEFORMAT.get(); 
9

Thats doğrudur. Apache Commons Lang'den FastDateFormat, güzel threadafe bir alternatiftir.

3.2 sürümünden bu yana, yalnızca 3.2 biçimlendirmeden önce ayrıştırmayı da destekler.

İlgili konular