Подтвердить что ты не робот

Проблемы с потоками в Javamail

Я изучаю, является ли Javamail потокобезопасным, в частности, в ситуации со многими сеансами, соответствующими разным пользователям, несколькими SMTP-серверами и использованием создания сообщений MIME и использованием метода transport.sendMessage. Я знаю, что Javamail ориентирован на использование на рабочем столе, что заставляет меня подозревать, что он, возможно, не был построен с потоками в голове, и мне интересно, есть ли у кого такой опыт.

4b9b3361

Ответ 1

Понятно, что правила безопасности потоков для JavaMail не очень хорошо документированы, но, надеюсь, они в основном соответствуют тому, что вы ожидаете.

Несколько потоков могут использовать сеанс.

Поскольку Transport представляет соединение с почтовым сервером, и только один поток может использовать соединение за раз, Transport будет синхронизировать доступ из нескольких потоков для обеспечения безопасности потоков, но вы действительно хотите использовать его только из одного потока.

Аналогично, Store может использоваться несколькими потоками, но доступ к базовому соединению будет синхронизирован и однопоточен.

Сообщение должно быть изменено только одним потоком за раз, но несколько потоков должны иметь возможность безопасно читать сообщение (хотя неясно, почему вы хотели бы это сделать).

Надеюсь, что это поможет...

Ответ 2

Потоки диспетчера javamail не кажутся таймаутом, если сервер не отвечает вовремя. это приводит к блокировке всех доступных нитей.

Протестировано это поведение как с 1.4.3, так и с 1.4.5.