如何使用多线程从Gmail服务器获取邮件?

时间:2016-10-03 11:39:16

标签: java multithreading swing

我在使用javax.mail API从Gmail服务器收到电子邮件时遇到问题。我必须使用5个线程一次获取5封邮件。请帮帮我。

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

1 个答案:

答案 0 :(得分: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服务器通信时,它在文件夹上保存本地锁(缓存锁)。这实际上意味着将一次提取一条消息。

我想您可以尝试在邮箱中打开多个IMAP会话,但我怀疑远程IMAP服务器(gmail)不会让您这样做。

但这是给你的问题。实际上是否需要并行获取电子邮件消息,或者并行处理它们是否足够? (代码中的瓶颈在哪里?提取或处理?)