watki + czeste odwolanie do obiektu static final

0

hej, mam oto dziwny problem. a wlasciwie to mam pytanie o wyjasnienie mi czemu sie tak dzieje.

jest sobie klasa ktora zajmuje sie parsowaniem roznych rzeczy. ma metody statyczne. jedna z metod parsuje daty ktore przychodza jako Stringi. w klasie tej mamy SimpleDateFormat zdefiniowany jako private static final (co chyba jest kluczowe w tym wszyskim). te daty do paroswania to przychodza skads (webservice czy cos w tym stylu-to nie jest istotne). Nie wiem
dokladnie jak to dziala,ale z tego co podejrzalam to jest jakis watek ktory w runie sobie to przerabia i wywoluje te wspomniana przeze mnie wczesniej metode do parsowania daty. Problem jest dziwny-mianowicie te dane przychodza szybko
(tzn sa pobierane przy kazdym ruchu myszki, wiec jak sobie szybko myszka latam to wiadomo jest to wywolywane raz za razem). i dostaje dziwne exceptiony - glownie: java.lang.NumberFormatException: For input string: "", ale tez ze input string nie jest pusty, tylko jakies dziwne rzeczy obciete w nim np 2.976. Dziwne jest to, ze do metody wchodzi wlasciwy String, ktory bez problemu sie parsuje. Wiem wiec na pewno ze nie dostaje zadnych smieci typu np wlasnie pusty String. cos sie wiec dzieje dalej. tylko w sumie dalej nie ma sie co dziac bo jest zwykly parse. Z braku pomyslu przenioslam moj SimpleDateFormat do tej metody i teraz dziala ok!
nie rozumiem totalnie co sie dzieje! czy moze byc problem jest bardzo szybko wiele razy odwolamy sie do finalnego statycznego obiektu? zaznaczam, ze blad to jest NumberFormatException (zazwyczaj pusty String), gdzie nie jest to mozliwe poniewaz wypisuje go sobie linijke wyzej i zawsze jest tam poprawna data.

klasa ta wyglada mniej wiecej tak:


class Test{

	private static final SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSz");

public static Date parseDate(String date) throws java.text.ParseException {

return df.parse(date);
}

}

 

i to powoduje te problemy. jednak gdy zmienie na :


class Test{


public static Date parseDate(String date) throws java.text.ParseException {

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSz");
return df.parse(date);
}


}

 

czy ktos z Was ma moze pojecie co sie tu dzieje? i dlaczego?

bede wdzieczna za wyjasnienia,
pzdr,
misty

0

W dokumentacji, na stronie http://download.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html jest wyraźnie napisane:

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.

Zapewne SimpleDateFormat korzysta z jakichś staticów w środku i stąd te problemy.

Nie wiem czy ta klasa jest kosztowna do stworzenia (tzn stworzenie obiektu). Jeżeli tak to możesz np użyć java.lang.ThreadLocal<T> i mieć osobne instancje dla osobnych wątków.

0

dzieki za odpowiedz!! totalnie tego nie rozumialam. dzieki wielkie :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1