Ash*_*ash 10 java concurrency calendar
我很惊讶地看到我们的许多应用程序线程竞争在从Calendar的构造函数访问的java.util.Hashtable.get(xx)方法上进行同步.
at java.util.Hashtable.get(java.lang.Object)
at java.util.Calendar.setWeekCountData(java.util.Locale)
at java.util.Calendar.<init>(java.util.TimeZone, java.util.Locale)
at java.util.GregorianCalendar.<init>(java.util.TimeZone, java.util.Locale)
Run Code Online (Sandbox Code Playgroud)
ctor查找一个静态哈希表,该哈希表用作缓存,但最终会阻塞所有线程.
/**
* Cache to hold the firstDayOfWeek and minimalDaysInFirstWeek
* of a Locale.
*/
private static Hashtable<Locale, int[]> cachedLocaleData = new Hashtable<Locale, int[]>(3);
protected Calendar(TimeZone zone, Locale aLocale)
{
.. .. snip ..
setWeekCountData(aLocale);
}
private void setWeekCountData(Locale desiredLocale)
{
/* try to get the Locale data from the cache */
int[] data = cachedLocaleData.get(desiredLocale);
....
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来操纵日期?Joda是否绕过了所有这些问题?
| 归档时间: |
|
| 查看次数: |
1275 次 |
| 最近记录: |