每一次时间格式化的时候都会去手动new SimpleDateFormat,每一次new都是一次较大的性能开销,因此想到的是用static的形式来提高性能。由于SimpleDateFormat是线程不安全的,因此可以借助ThredLocal来实现线程安全。

代码如下:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class DateFormatUtil {/*** 日期格式*/private static final String DATE_FORMAT = "yyyy-MM-dd";/*** 日期时间格式*/private static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";/*** 初始化日期格式的simpleDateFormat*/private static final ThreadLocal<SimpleDateFormat> DATE = new ThreadLocal<SimpleDateFormat>() {@Overrideprotected synchronized SimpleDateFormat initialValue() {return new SimpleDateFormat(DATE_FORMAT);}};/*** 初始化日期时间格式的SimpleDateFormat*/private static final ThreadLocal<SimpleDateFormat> DATE_TIME = new ThreadLocal<SimpleDateFormat>() {@Overrideprotected synchronized SimpleDateFormat initialValue() {return new SimpleDateFormat(DATE_TIME_FORMAT);}};/*** 将日期格式化为字符串** @param date Date类型的日期* @return 格式化后的字符串日期*/public static String formatDate(Date date) {return getDateFormat().format(date);}/*** 将日期时间格式化为字符串** @param date Date类型的日期* @return 格式化后的字符串日期*/public static String formatDateTime(Date date) {return getDateTimeFormat().format(date);}/*** 将字符串格式化为日期** @param date 字符串日期* @return Date类型的日期*/public static Date parseDate(String date) {try {return getDateFormat().parse(date);} catch (ParseException e) {e.printStackTrace();}return null;}/*** 将字符串格式化为日期时间** @param date 字符串日期* @return Date类型的日期*/public static Date parseDateTime(String date) {try {return getDateTimeFormat().parse(date);} catch (ParseException e) {e.printStackTrace();}return null;}private static SimpleDateFormat getDateFormat() {return DATE.get();}private static SimpleDateFormat getDateTimeFormat() {return DATE_TIME.get();}}

测试100万,500万,1000万循环不断的format时间测试性能:

public static void main(String[] args) {long start = System.currentTimeMillis();for (int i = 0; i < count; i++) {SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DateFormatUtil.DATE_TIME_FORMAT);simpleDateFormat.format(new Date());}long end = System.currentTimeMillis();System.out.println("new SimpleDateFormat耗时:" + (end - start));//测试DateFormatUtillong start2 = System.currentTimeMillis();for (int i = 0; i < count; i++) {DateFormatUtil.formatDateTime(new Date());}long end2 = System.currentTimeMillis();System.out.println("DateFormatUtil耗时:" + (end2 - start2));
}

100万的时候

new数据的方式 ,耗时: 2841、2470 、2672

ThreadLocal的方式,耗时:1286、1236、1362

500万的时候

new数据的方式 ,耗时: 7566、7445 、7537

ThreadLocal的方式,耗时:4165、4282、4122

100万的时候

new数据的方式 ,耗时: 12818、13513

ThreadLocal的方式,耗时:6038、6002

性能是有所提升的。

SimpleDateFormat性能优化相关推荐

  1. Hibernate查询性能优化技巧

    数据库查询性能的提升也是涉及到开发中的各个阶段,在开发中选用正确的查询方法无疑是最基础也最简单的. SQL语句的优化 使用正确的SQL语句可以在很大程度上提高系统的查询性能.获得同样数据而采用不同方式 ...

  2. ps图片黑白调整算法——java实现及性能优化

    参考: http://blog.csdn.net/matrix_space/article/details/22992833 http://blog.csdn.net/majinlei121/arti ...

  3. 拉勾教育 | Java 性能优化实战 21 讲

    开篇词 开篇词 | Java 性能优化,是进阶高级架构师的炼金石 你好,我是李国.作为<Java 性能优化与面试 21 讲>这个课程的作者,我先来简单介绍下自己. 我曾任京东金融.陌陌科技 ...

  4. kali2020进入单模式_蚂蚁集团技术专家山丘:性能优化的常见模式及趋势

    陈显铭(山丘) 读完需要 6分钟 速读仅需 2 分钟 陈显铭,花名山丘,就职于蚂蚁集团,对分布式应用架构.服务化.性能优化等有深入的理解.参与支付宝支付链路核心系统,设计.调优应用系统关键能力, 高效 ...

  5. MegEngine推理性能优化

    MegEngine推理性能优化 MegEngine「训练推理一体化」的独特范式,通过静态图优化保证模型精度与训练时一致,无缝导入推理侧,再借助工业验证的高效卷积优化技术,打造深度学习推理侧极致加速方案 ...

  6. asp.net程序性能优化的七个方面

    asp.net程序性能优化的七个方面 一.数据库操作 1.用完马上关闭数据库连接 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器 ...

  7. java criteria限制条数_java架构—Oracle SQL性能优化

    (1) 选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先 ...

  8. ab测试nginx Nginx性能优化

    转自:https://www.cnblogs.com/nulige/p/9369700.html 1.性能优化概述 在做性能优化前, 我们需要对如下进行考虑 1.当前系统结构瓶颈 观察指标 压力测试 ...

  9. RHEL/CentOS通用性能优化、安全配置参考

    RHEL/CentOS通用性能优化.安全配置参考 本文的配置参数是笔者在实际生产环境中反复实践总结的结果,完全适用绝大多数通用的高负载.安全性要求的网络服务器环境.故可以放心使用. 若有异议,欢迎联系 ...

最新文章

  1. [15]APUE:pipe / FIFO
  2. AsyncDisplayKit
  3. 为什么CRM Opportunity的删除会触发一个通向BW系统的RFC
  4. 单行、多行文本超出显示省略号
  5. linux远程仿真,11.5 仿真的远程桌面系统: XRDP 服务器
  6. mysql数据库中实现内连接、左连接、右连接
  7. Java EE实战教程 servlet (一)
  8. 派生类构造的时候一定要调用_分手的时候,一定要好好说再见
  9. 翻山越岭上uvaoj
  10. Python新闻网站项目-9.Django前端HTML功能
  11. 视频教程-java后台+微信小程序 实现完整的点餐系统-微信开发
  12. 4k hidpi 黑苹果_黑苹果如何通过开启HIDPI来增强显示效果?
  13. 基于halcon的颜色识别---杜邦线识别
  14. Excel如何生成11位随机数,包含大小写字母和数字
  15. 内存超频对游戏提升大吗 玩游戏有必要超频吗
  16. arcgis js(二)显示三维地图
  17. android 摄像头黑屏,5+app 安卓调用摄像头黑屏 苹果可以
  18. 基于人工智能的盲人阅读器
  19. kubesphere K8S Kubeedge 安装配置菜鸟级指导
  20. 【汇编】微机原理与接口技术课程设计

热门文章

  1. 50个经典的Photoshop磨皮教程
  2. 【动手撸深度学习】领导说你连调参都不会?
  3. 阿里云安装 minikube v1.9.2
  4. 桥梁毕业设计、公寓楼毕业设计、钢框架结构办公楼毕业设计、钢架厂房毕业设计、框架教学楼毕业设计、办公楼毕业设计、框架结构商场毕业设计、宿舍楼施工组织设计、砖混住宅毕业设计、造价毕业设计……
  5. 魔兽世界 最短路径问题
  6. 最新整理的周立波语录
  7. 诚之和:自嗨锅能颠覆海底捞吗?
  8. 网络与社会——我的观点(探讨)
  9. Apple Watch se功能介绍 苹果手表se续航
  10. webhttp协议django初识