小编Yin*_*ang的帖子

并发访问用于计算逾期天数的静态方法

我有一个带有以下签名的静态方法:

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;
}
Run Code Online (Sandbox Code Playgroud)

当同一个参数同时对上述方法进行多次调用时,结果不同.

56
56
1279716
56
56
56
5
736387
56
-1226645849
56
Run Code Online (Sandbox Code Playgroud)

只有56才是正确答案.但是当我用Joda-Time替换Calendar ,它会返回正确的答案.如何在不使用Joda-Time锁定,解锁 …

java concurrency calendar

4
推荐指数
1
解决办法
105
查看次数

标签 统计

calendar ×1

concurrency ×1

java ×1