Javamail中的Threadsafety

时间:2012-10-04 17:31:01

标签: java multithreading smtp javamail

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

2 个答案:

答案 0 :(得分:63)

不可否认,JavaMail的线程安全规则没有详细记录,但希望它们大多符合您的预期。

多个线程可以使用会话。

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

同样,一个商店可以被多个线程使用,但是对底层连接的访问​​将被同步并且是单线程的。

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

希望有帮助...

答案 1 :(得分:1)

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

使用1.4.3&amp ;;测试此行为1.4.5。