以下代码有问题吗?
我想在执行百万次的进程中使用方法parseDateToInteger。可以以多线程方式访问此进程,因此我同步了该方法。我避免在方法中创建Calendar实例,因为它花费了宝贵的时间。但我不确定这种代码行为。使用此代码有什么问题吗?
private static final Calendar CALENDAR_BRASIL = GregorianCalendar.getInstance(LOCALE_BRASIL);
public synchronized static int parseDateToInteger(Date data) {
CALENDAR_BRASIL.setTime(data);
int ano = CALENDAR_BRASIL.get(Calendar.YEAR);
int mes = CALENDAR_BRASIL.get(Calendar.MONTH)+1;
int dia = CALENDAR_BRASIL.get(Calendar.DATE);
return ano * 10000 + mes * 100 + dia;
}
编辑: 我看到这篇文章让我害怕,但作者没有使用同步方法。
http://blog.bielu.com/2008/08/javautilcalendar-confusion-is-it-safe_28.html
答案 0 :(得分:1)
这是一个坏主意。虽然您已经避免创建所有这些对象,但您现在拥有的方法一次只能由一个对象使用。因此,不是创建一百万个对象,而是部分并行,您将拥有必须等待轮到他们使用日历的进程。
只需为每个线程创建实例。