目前,我正在与 Sun 课堂上的一个错误作斗争java.net.Authenticator
。似乎Authenticator
该类具有系统范围的 static Authenticator
。这导致我的多线程应用程序出现以下问题。
- 线程 1 - 为用户 1 进行身份验证
- 线程 2 - 为用户 2 进行身份验证
- 线程 1 - 执行代码为用户 1 下载消息
此时,系统将获取用户 2 的消息,而不是用户 1 的消息。
我已经尝试寻找解决方案。许多人建议尝试以下代码:
AuthCacheValue.setAuthCache(new AuthCacheImpl());
Authenticator.setDefault(exchangeAuthenticator);
但是,这对我不起作用,因为我的应用程序是多线程的(exchangeAuthenticator
将始终设置为在最新线程中初始化的身份验证器)。
如果有人有任何想法,即使是 hack 目前也会这样做,我真的很感激,因为目前唯一的“整洁”解决方案是synchronized
在主要执行方法上放置一个对性能产生巨大影响的方法。