Java 将日历存储在常量字段中,以便以后使用,避免在方法中创建日历
下面的代码有什么问题吗 我想在执行百万次的进程中使用parseDateToInteger方法。这个进程可以用多线程的方式访问,所以我同步了这个方法。我避免在方法内部创建日历实例,因为它占用了宝贵的时间。但我不确定这种代码行为。使用此代码时有任何问题吗Java 将日历存储在常量字段中,以便以后使用,避免在方法中创建日历,java,multithreading,performance,Java,Multithreading,Performance,下面的代码有什么问题吗 我想在执行百万次的进程中使用parseDateToInteger方法。这个进程可以用多线程的方式访问,所以我同步了这个方法。我避免在方法内部创建日历实例,因为它占用了宝贵的时间。但我不确定这种代码行为。使用此代码时有任何问题吗 private static final Calendar CALENDAR_BRASIL = GregorianCalendar.getInstance(LOCALE_BRASIL); public synchronized static i
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;
}
编辑:
我看到这篇文章让我感到害怕,但作者没有使用同步方法
这是个坏主意。虽然避免了创建所有这些对象,但现在有了一个一次只能由一个对象使用的方法。因此,与部分并行地创建一百万个对象不同,您将有一些进程必须等待轮到它们使用日历
只需为每个线程创建实例。我不是线程专家,但似乎您已经完成了使代码线程安全所需的操作(只要对CALENDAR_BRASIL的任何其他访问也在同一对象上同步)。@alexpfb:我想这是最好的。