【发布时间】:2010-04-20 09:35:33
【问题描述】:
如果#setDefault(TimeZone timezone) 被运行在与JDK 1.6 相同的应用服务器上的并发应用程序调用会发生什么
正如TimeZone #setDefault changes in JDK 6 中所讨论的那样,调用现在会更改 VM 范围,这可能会产生可怕的后果。
如果您不管理应用程序服务器,如何确保 TimeZone 不会更改?
【问题讨论】:
如果#setDefault(TimeZone timezone) 被运行在与JDK 1.6 相同的应用服务器上的并发应用程序调用会发生什么
正如TimeZone #setDefault changes in JDK 6 中所讨论的那样,调用现在会更改 VM 范围,这可能会产生可怕的后果。
如果您不管理应用程序服务器,如何确保 TimeZone 不会更改?
【问题讨论】:
防止TimeZone.setDefault(...) 在VM 范围内产生影响的方法是确保您的SecurityManager 不授予应用程序写入"user.timezone" 系统属性的权限。
要了解原因,请查看the source code。
现在,可以说依赖 Javadoc 中未记录的行为有点顽皮。但在这种情况下,我们别无选择。此外,鉴于这种特殊方法的历史,Sun / Oracle 工程师不太可能再次改变其行为......
【讨论】: