Ecco un link al codice sorgente di Calendar e GregorianCalendar in Java 7
Se si legge il codice, vedrete che nessuno dei metodi di istanza sono sincronizzati, e nessuno dei campi istanza sono volatile
. Vedrai anche che anche i metodi del campo get
possono causare la mutazione di un'istanza di Calendar. E poiché non viene eseguita alcuna sincronizzazione, thread diversi potrebbero vedere versioni obsolete dei campi di un oggetto Calendario dopo un'operazione di muting.
Per la cronaca, l'azione mutazione nel campo ottenere metodi accade in/durante una chiamata a questo metodo:
1555 protected void complete()
1556 {
1557 if (!isTimeSet)
1558 updateTime();
1559 if (!areFieldsSet || !areAllFieldsSet) {
1560 computeFields(); // fills in unset fields
1561 areAllFieldsSet = areFieldsSet = true;
1562 }
1563 }
In breve, la classe Calendar
non è thread-safe, e non è GregorianCalendar
o perché eredita i campi e i metodi non thread-safe.
Ma non credetemi. Fai la tua analisi del codice sorgente.
E, per finire, la documentazione non dice nulla in un modo o l'altro, non per il calendario, e nemmeno per la data.
Se i javadocs non specificano il filo di sicurezza di una classe, allora si dovrebbe supporre che non è thread-safe.
fonte
2012-08-26 16:20:16
http: // stackoverflow.it/questions/6245053/how-to-make-a-static-calendar-safe-safe vedere che –
@AlexColeman Si noti che la prima risposta dice "no", la seconda risposta dice "sì" e nessuna di queste discussioni è sostenuto da qualsiasi cosa. –
+1 per 'Joda Time' però. Se i problemi relativi alla sicurezza dei thread sono la tua preoccupazione, usare questa opzione sarebbe una buona opzione. – Sujay