zoukankan      html  css  js  c++  java
  • DateFormat 多线程问题

     在写实时应用解析日志的时候,有如下代码:

     1 public class CalPvLogParse {
     2     private static SimpleDateFormat logTimeFormat = new SimpleDateFormat("yyyy/MM/dd-HH:mm:ss");
     3 
     4     public static CalPvLog process(PvLog pvLog) {
     5         try {
     6             String dateStr = DateUtil.getDateStr(logTimeFormat.parse(pvLog.getLogTime()));
     7             String hourStr = DateUtil.getHourStr(logTimeFormat.parse(pvLog.getLogTime()));
     8             String cookie = pvLog.getCookie();
     9             String displayType = pvLog.getDisplayType();
    10             String kdt_id = pvLog.getKdt_id();
    11             String displayId = pvLog.getDisplayId();
    12             return new CalPvLog(dateStr, hourStr, cookie, displayType, displayId, kdt_id);
    13         }
    14         catch (ParseException e) {
    15             System.err.println("parse CalPvLog error");
    16             return null;
    17         }
    18     }
    19 }

    以上代码在写的单元测试中能够顺利通过,但是接线上以后总是出现一些莫名奇怪的错误。报的异常基本在代码6,7行处(由于当时没有截图,所以不能贴了)。查了一下,原因是SimpleDateFormat不是线程安全的。一个简单的解决办法是每次解析时都重新new一个SimpleDateFormat对象,但是资源耗费厉害。后来发现,java有比较成熟的处理日期各种格式转化的joda-time库,接口简单并且是线程安全的,修改如下:

     1 public class CalPvLogParse {
     2     private static DateTimeFormatter format = DateTimeFormat.forPattern("yyyy/MM/dd-HH:mm:ss");
     3 
     4     public static CalPvLog process(PvLog pvLog) {
     5         DateTime dateTime = DateTime.parse(pvLog.getLogTime(), format);
     6         String dateStr = dateTime.toString("MMdd");
     7         String hourStr = dateTime.toString("HH");
     8         String cookie = pvLog.getCookie();
     9         String displayType = pvLog.getDisplayType();
    10         String kdt_id = pvLog.getKdt_id();
    11         String displayId = pvLog.getDisplayId();
    12         return new CalPvLog(dateStr, hourStr, cookie, displayType, displayId, kdt_id);
    13     }
    14 }

    修改以后,问题解决。 另外pom配置如下:

    1         <dependency>
    2             <groupId>joda-time</groupId>
    3             <artifactId>joda-time</artifactId>
    4             <version>2.9.4</version>
    5         </dependency>
  • 相关阅读:
    关于SQL Server 2005 SP2中提供的Vardecimal存储格式
    .NET平台网络编程之最佳实践 【转载】
    如果类型转换无可避免,那么应该尽可能用as运算符,而不是强制转换
    ArraySegment 的使用 【转载】
    如果不写Order By子句,会怎么样
    ToString 的几个思考
    尽量用属性(Property),而不是字段(Field)
    如何设置SQL Server服务器上面的CPU占用过高的警报
    SQL Server 2008 Replication and Filestream, are both supported together?【转载】
    Microsoft Sync Framework
  • 原文地址:https://www.cnblogs.com/superhedantou/p/5866523.html
Copyright © 2011-2022 走看看