Threadsafety in Javamail

2022-09-01 15:02:10

我正在研究Javamail是否是线程安全的,特别是在与不同用户对应的许多会话,几个SMTP服务器以及使用创建MIME消息和使用方法的情况下。我知道Javamail是面向桌面使用的,这让我怀疑它可能不是在考虑线程的情况下构建的,我想知道是否有人有这样的经验。transport.sendMessage


答案 1

诚然,JavaMail的线程安全规则没有得到很好的记录,但希望它们大多符合您的期望。

多个线程可以使用一个会话。

由于传输表示与邮件服务器的连接,并且一次只有一个线程可以使用该连接,因此传输将同步来自多个线程的访问以保持线程安全,但您实际上只想从单个线程使用它。

同样,存储区可由多个线程使用,但对基础连接的访问将同步和单线程。

一条消息一次只能由一个线程修改,但多个线程应该能够安全地读取消息(尽管不清楚为什么要这样做)。

希望有所帮助...


答案 2

如果服务器没有及时响应,javamail调度程序线程似乎不会超时。这会导致锁定所有可用线程。

已在 1.4.3 和 1.4.5 中测试此行为。