2012-10-04 8 views
20

Sto studiando se Javamail è a prova di thread, in particolare in una situazione con molte sessioni corrispondenti a diversi utenti, diversi server SMTP e l'uso di creare messaggi MIME e l'uso del metodo transport.sendMessage. So che Javamail è orientato verso l'uso desktop che mi fa sospettare che potrebbe non essere stato costruito pensando al threading e mi sto chiedendo se qualcuno abbia una tale esperienza.Threadsafety in Javamail

risposta

53

Le regole di sicurezza del thread per JavaMail non sono ben documentate, ma si spera che corrispondano per lo più a quanto ci si aspetterebbe.

Più thread possono utilizzare una sessione.

Poiché un trasporto rappresenta una connessione a un server di posta e solo un singolo thread può utilizzare la connessione alla volta, un trasporto sincronizzerà l'accesso da più thread per mantenere la sicurezza dei thread, ma in realtà si desidera solo utilizzare da un singolo thread.

Analogamente, un negozio può essere utilizzato da più thread, ma l'accesso alla connessione sottostante verrà sincronizzato e con una singola thread.

Un messaggio deve essere modificato solo da un singolo thread alla volta, ma più thread dovrebbero essere in grado di leggere un messaggio in modo sicuro (anche se non è chiaro il motivo per cui si vorrebbe farlo).

Speranza che aiuta ...

+0

Hai imparato questo dalla javadoc, dalle fonti, dall'esperienza? – ewernli

+32

Ho scritto molto del codice e lo mantengo tutto. –

+2

Complimenti! Poiché non c'erano riferimenti a sostegno delle tue spiegazioni, mi chiedevo come potresti essere così assertivo. Ora capisco;) Chiaramente, +1! – ewernli

1

I fili del dispatcher JavaMail non sembra timeout se il server non risponde in tempo. questo porta al blocco su tutti i thread disponibili.

Testato questo comportamento con entrambi 1.4.3 & 1.4.5.