我正在开发一个 java 应用程序,它使用 attachemnts 获取并保存所有邮件。但我想用多线程来做。我的想法就是这样。
一个计时器线程正在获取所有邮件并将它们放入 BlockingQueue。我正在将 Javax.mail.Message
对象放入队列。然后我的工作线程正在获取并处理它们。
问题是当工作线程正在获取消息并调用方法时:
Message.getFolder.open();
Message.getFolder.close();
会导致问题。如果一个线程打开该文件夹而另一个线程尝试打开同一文件夹,应用程序将抛出不允许操作异常。
有人可以帮助我吗?
最佳答案
尝试 Folder.isOpen() - 指示此文件夹是否处于“打开”状态。
在打开它之前,例如
Folder folder = Message.getFolder();
if(folder.isOpen()==false){
folder.open();
}
同样在关闭之前,检查它是否已经打开然后才关闭:
if(folder.isOpen()){
folder.close();
}
关于多线程的Javax邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19088167/