Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将日历存储在常量字段中,以便以后使用,避免在方法中创建日历_Java_Multithreading_Performance - Fatal编程技术网

Java 将日历存储在常量字段中,以便以后使用,避免在方法中创建日历

Java 将日历存储在常量字段中,以便以后使用,避免在方法中创建日历,java,multithreading,performance,Java,Multithreading,Performance,下面的代码有什么问题吗 我想在执行百万次的进程中使用parseDateToInteger方法。这个进程可以用多线程的方式访问,所以我同步了这个方法。我避免在方法内部创建日历实例,因为它占用了宝贵的时间。但我不确定这种代码行为。使用此代码时有任何问题吗 private static final Calendar CALENDAR_BRASIL = GregorianCalendar.getInstance(LOCALE_BRASIL); public synchronized static i

下面的代码有什么问题吗

我想在执行百万次的进程中使用parseDateToInteger方法。这个进程可以用多线程的方式访问,所以我同步了这个方法。我避免在方法内部创建日历实例,因为它占用了宝贵的时间。但我不确定这种代码行为。使用此代码时有任何问题吗

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:我想这是最好的。