4
我有以下签名一个静态方法:静态方法的并发访问,其被用于计算逾期天
private static volatile SimpleDateFormat payDayFormat = new SimpleDateFormat("yyyyMMdd");
public static int overdueDays(String repayDay){
try {
Date billDate = payDayFormat.parse(repayDay);
Calendar startDate = Calendar.getInstance();
startDate.setTime(billDate);
Calendar endDate = Calendar.getInstance();
long end = endDate.getTimeInMillis();
long start = startDate.getTimeInMillis();
Long days = TimeUnit.MILLISECONDS.toDays(Math.abs(end - start));
return days.intValue();
} catch (ParseException e) {
logger.error("判断是否逾期解析时间出错");
}
return 0;
}
当存在于上述方法制得同时均可进行相同的参数的多个呼叫,其结果不同。
56
56
1279716
56
56
56
5
736387
56
-1226645849
56
只有是正确的答案。 但是,当我更换日历与乔达时间,它返回正确的answer.How我应该改变这种代码,而无需使用乔达时间或锁,解锁,并得到正确的答案。
你可以标记方法'synchronized';但你可能不需要 - 在这个方法中是否有任何静态变量? –
'payDayFormat'类型是什么? –
如果你有Java 8,你可以使用Java时间,(这几乎是Joda时间) –