LocalDateTime 和 Date 的比较与区别
通过本篇文章了解
为什么需要LocalDate、LocalTime、LocalDateTime【java8新提供的类】
java8新的时间API的使用方式,包括创建、格式化、解析、计算、修改
为什么需要LocalDate、LocalTime、LocalDateTime
Date如果不格式化,打印出的日期可读性差,如下
所以我们经常会使用到格式化时间类 SimpleDateFormat,但SimpleDateFormat是线程不安全的 SimpleDateFormat的format方法最终调用代码:
calendar是共享变量,并且这个共享变量没有做线程安全控制。当多个线程同时使用相同的SimpleDateFormat对象【如用static修饰的SimpleDateFormat】调用format方法时,多个线程会同时调用calendar.setTime方法,可能一个线程刚设置好time值另外的一个线程马上把设置的time值给修改了导致返回的格式化时间可能是错误的。
在多并发情况下使用SimpleDateFormat需格外注意SimpleDateFormat除了format是线程不安全以外,parse方法也是线程不安全的。parse方法实际调用alb.establish(calendar).getTime()方法来解析,alb.establish(calendar)方法里主要完成了
重置日期对象cal的属性值
使用calb中中属性设置cal
返回设置好的cal对象
但是这三步不是原子操作
多线程并发如何保证线程安全
避免线程之间共享一个SimpleDateFormat对象,每个线程使用时都创建一次SimpleDateFormat对象 => 创建和销毁对象的开销大
对使用format和parse方法的地方进行加锁 => 线程阻塞性能差
使用ThreadLocal保证每个线程最多只创建一次SimpleDateFormat对象 => 较好的方法
一起使用java8全新的日期和时间API
创建LocalDate 只获取某年某月
获取年、月、日、星期几
获取时分秒
LocalDateTime
获取年月日时分秒,等于LocalDate+LocalTime
创建LocalDateTime
为什么推荐大家学习新的时间API
其中还有一些没接受的对时间操作的api,相比旧的api简单了许多
和SimpleDateFormat相比,DateTimeFormatter是线程安全的
祝大家每天进步有点,钱程似锦,觉得有帮助的点点关注
评论