2012-10-04 12 views
20

Sprawdzam, czy Javamail jest bezpieczny dla wątków, w szczególności w sytuacji, gdy wiele sesji odpowiada różnym użytkownikom, kilku serwerom SMTP i wykorzystaniu tworzenia komunikatów MIME i zastosowaniu metody transport.sendMessage. Wiem, że Javamail jest zorientowany na używanie komputera, co sprawia, że ​​podejrzewam, że nie został zbudowany z myślą o wątkach i zastanawiam się, czy ktoś ma takie doświadczenie.Threadsafety w Javamail

Odpowiedz

53

Co prawda reguły bezpieczeństwa nici dla JavaMail nie są dobrze udokumentowane, ale mam nadzieję, że w większości odpowiadają one oczekiwaniom.

Wiele wątków może korzystać z sesji.

Ponieważ Transportu reprezentuje połączenie z serwerem pocztowym, a tylko jeden wątek może korzystać z połączenia na raz, transport będzie synchronizować dostęp z wielu wątków w celu utrzymania bezpieczeństwa wątku, ale będziesz naprawdę chcą tylko korzystać to z jednego wątku.

Podobnie, Store może być używany przez wiele wątków, ale dostęp do podstawowego połączenia zostanie zsynchronizowany i pojedynczy wątek.

Wiadomość powinna być modyfikowana tylko przez jeden wątek na raz, ale wiele wątków powinno być w stanie bezpiecznie odczytać wiadomość (chociaż nie jest jasne, dlaczego chciałbyś to zrobić).

nadzieję, że pomoże ...

+0

Nauczyłeś się tego z javadoc, źródeł, z doświadczenia? – ewernli

+32

Napisałem wiele kodu i utrzymuję je wszystkie. –

+2

Kudos! Ponieważ nie było żadnych odniesień potwierdzających twoje wyjaśnienia, zastanawiałem się, jak możesz być tak asertywny. Teraz rozumiem;) Oczywiście, +1! – ewernli

1

W JavaMail dyspozytorskie wątki nie wydaje się limit czasu, gdy serwer nie odpowiada w czasie. to prowadzi do zablokowania wszystkich dostępnych wątków.

Przetestowano to zachowanie dla obu 1.4.3 & 1.4.5.

Powiązane problemy