出身背景
我将实现一个程序,从MS Exchange 2007服务器获取邮件。
由于架构设计,我必须运行多个线程(不是固定数量)才能连接到同一个邮箱;获取邮件的文件夹相同。
JavaMail:1.5.6
交易所:2007年
问题
每个线程将获得一个电子邮件id,并使用
IMAPStore
,然后打开
IMAPFolder
,最后通过搜索email-id获取电子邮件。最后关闭
IMAPFolder公司
&
IMAP存储
.
当程序运行一段时间后,线程增加,我将得到以下异常:
javax.mail.StoreClosedException: failed to create new store connection
at com.sun.mail.imap.IMAPFolder.throwClosedException(IMAPFolder.java:3368)
at com.sun.mail.imap.IMAPFolder.doCommand(IMAPFolder.java:3497)
at com.sun.mail.imap.IMAPFolder.exists(IMAPFolder.java:560)
at com.myco.myapp.MessageHandler.getFolder(MessageHandler.java:68)
我想Exchange server上可能有连接限制,所以我问了Exchange管理员,他说(每个邮箱)的连接限制设置为16。
然后我做了一个测试:
-
IMAP存储
-
IMAPFolder公司
15号开赛后,我也遇到了同样的例外
IMAPFolder公司
试着打开第16个。
我的问题
我阅读了IMAPFolder的源代码,发现它的大部分功能是
synchronized
. 只使用一个全局变量安全吗
IMAP存储
&
IMAPFolder公司
多线程共享的对象?