27

Javamail がスレッドセーフかどうかを調査しています。特に、さまざまなユーザーに対応する多くのセッション、複数の SMTP サーバー、および MIME メッセージの作成とtransport.sendMessageメソッドの使用がある状況で調査しています。Javamail がデスクトップでの使用を重視していることは知っていますが、スレッド化を念頭に置いて構築されていないのではないかと疑っています。

4

2 に答える 2

73

確かに、JavaMail のスレッド セーフ規則は十分に文書化されていませんが、うまくいけば、それらはほとんど期待どおりのものです。

複数のスレッドがセッションを使用できます。

Transport はメール サーバーへの接続を表し、一度に 1 つのスレッドしか接続を使用できないため、Transport は複数のスレッドからのアクセスを同期してスレッド セーフを維持しますが、実際には単一のスレッドからのみ使用する必要があります。スレッド。

同様に、ストアは複数のスレッドで使用できますが、基になる接続へのアクセスは同期され、シングル スレッドになります。

Message は、一度に 1 つのスレッドによってのみ変更されるべきですが、複数のスレッドがメッセージを安全に読み取ることができる必要があります (ただし、なぜそうする必要があるのか​​は明らかではありません)。

それが役立つことを願っています...

于 2012-10-04T18:16:17.503 に答える
2

サーバーが時間内に応答しない場合、javamail ディスパッチャ スレッドはタイムアウトしないようです。これにより、使用可能なすべてのスレッドがロックされます。

1.4.3 と 1.4.5 の両方でこの動作をテストしました。

于 2012-10-08T07:43:28.583 に答える