2016-10-03 16 views
0

私は、javax.mail APIを使用してGmailサーバーから電子メールを取得する際に問題があります。 5つのスレッドを使って一度に5つのメールをフェッチする必要があります。私を助けてください。マルチスレッドを使用してGmailサーバーからメールを取得するにはどうすればよいですか?

folder = (IMAPFolder) store.getFolder(m_StrfolderName); 
folder.open(Folder.READ_WRITE); 
Message []messages = folder.getMessages(); 
+0

投稿する前にコードを書式設定してください。フォーマットする方法のリンクに従ってください。http://meta.stackexchange.com/questions/22186/how-do-i-format-my-code-blocks –

答えて

1

の代わりにこれをやって:

Message[] messages = folder.getMessages(); 

あなたは(理論的に)これを行うことができます:

final int count = folder.getMessageCount(); 
// in multiple threads 
for (int i /* in a subset of [0 .. count - 1] */) { 
    Message message = folder.getMessage(i); 
    // process it 
} 

しかし、私はこれが並行してメッセージを取得するために起こっているとは思いません。問題は、getMessage(int)がIMAPサーバと通信しているときに、そのフォルダにローカルロック(キャッシュロック)を保持していることです。これは事実上、メッセージが1つずつ取り出されることを意味します。

私はあなたのメールボックスに複数のIMAPセッションを開こうとするかもしれないと思うが、リモートIMAPサーバー(gmail)がそれを許可しないと思われる。

ここにあなたの質問があります。実際には、電子メールメッセージを並行して取得する必要がありますか、並列処理するだけで十分ですか? (コードのボトルネックはどこにありますか?フェッチや処理は?)

関連する問題