我正在编写一个多线程Java应用程序,其中每个用户请求都会创建一个新线程,该线程应根据用户首选项使用不同的Locale。这不是一个Web应用程序,因此会话的概念不适用于此。
有没有办法设置默认的Locale - 活动的 - 只是在线程范围内?我一直在文档中查看它,并没有说明默认的Locale是否适用于线程,类加载器,进程或整个JVM。
感谢。问候。
答案 0 :(得分:3)
来自Locale.getDefault
的Javadoc:
获取默认值的当前值 此Java实例的语言环境 虚拟机。
默认语言环境绝对是一个JVM范围的变量,不应该用于尝试跟踪用户的语言环境。您应该查看讨论如何使用这些类的Java Internationalization。
在您的情况下,您似乎可以使用ThreadLocal<Locale>
,请参阅ThreadLocal。
答案 1 :(得分:0)
在较小的一点上,您提到每个用户请求都会创建一个新线程..您可能希望查看使用线程池并重用线程作为无限的线程创建和销毁会损害性能。根据您的使用情况,您可能还希望在此线程池上设置一个绑定,以防止大量用户将您的应用程序停止运行