Потоковая безопасность в Javamail
Я исследую, является ли Javamail поточно-ориентированным, особенно в ситуации, когда много сессий соответствуют различным пользователям, нескольким SMTP-серверам, а также использованию создания MIME-сообщений и использованию transport.sendMessage
метод. Я знаю, что Javamail ориентирован на использование на рабочем столе, что заставляет меня подозревать, что оно не было создано с учетом многопоточности, и мне интересно, есть ли у кого-нибудь такой опыт.
2 ответа
По общему признанию, правила безопасности потока для JavaMail плохо документированы, но, надеюсь, они в основном соответствуют тому, что вы ожидаете.
Несколько потоков могут использовать сеанс.
Поскольку транспорт представляет собой соединение с почтовым сервером, и только один поток может использовать соединение одновременно, транспорт будет синхронизировать доступ из нескольких потоков для обеспечения безопасности потока, но вы действительно захотите использовать его только из одного потока. нить.
Аналогично, Store может использоваться несколькими потоками, но доступ к базовому соединению будет синхронизированным и однопоточным.
Сообщение должно быть изменено только одним потоком за раз, но несколько потоков должны иметь возможность безопасно читать сообщение (хотя неясно, зачем вам это нужно).
Надеюсь, это поможет...
Потоки диспетчера javamail, кажется, не истекают, если сервер не отвечает вовремя. это приводит к блокировке всех доступных потоков.
Протестировал это поведение с 1.4.3 и 1.4.5.