都9012了,Java8中的日期时间API你还没有掌握? (2)

java8api对于时间戳,日期时间以及老版本的Date对象之间的转换也进行了兼容和适配,所有的转换操作都可以基于Instant对象进行。由于LocalDate,LocalTime和LocalDateTime三个类的操作完全一样,所以下文仍使用LocalDateTime演示。

7.1 时间戳转LocalDate,LocalDate,LocalDateTime

long timestamp = Instant.now().toEpochMilli(); LocalDateTime localDateTime = Instant.ofEpochMilli(timestamp).atOffset(ZoneOffset.ofHours(8)).toLocalDateTime(); // 打印结果:2019-12-02T23:20:25.791

7.2 LocalDate,LocalDate,LocalDateTime转时间戳

LocalDateTime localDateTime = LocalDateTime.now(); long timestamp = localDateTime.toInstant(ZoneOffset.ofHours(8)).toEpochMilli(); // 打印结果:1575300368099

7.3 兼容就版本Date

LocalDateTime localDateTime3 = LocalDateTime.now();Date date = Date.from(localDateTime.atZone(ZoneOffset.ofHours(8)).toInstant());LocalDateTime localDateTime4  = localDateTime3.atZone(ZoneOffset.ofHours(8)).toLocalDateTime(); // 打印结果 date:Mon Dec 02 23:32:53 CST 2019 // 打印结果 lcoalDateTime4:2019-12-02T23:32:53.188 八, Q&A

上一篇问题:在java中通常使用synchronized来实现方法同步,AQS中通过CAS保证了修改同步状态的一致性问题,那么对比synchronized,cas有什么优势不同与优势呢?你还知道其他无锁并发的策略吗?

8.1 Answer

Java中的无锁并发策略可以分为三种:

基于乐观锁的CAS操作

Copy On Write:写时复制是指:在并发访问的情景下,当需要修改JAVA中Containers的元素时,不直接修改该容器,而是先复制一份副本,在副本上进行修改。修改完成之后,将指向原来容器的引用指向新的容器(副本容器)

ThreadLocal:线程本地存储,就是为每一个线程创建一个变量,只有本线程可以在该变量中查看和修改值。

8.2 Question

这是一道送分题:正如上文提到的,Java8之前的日期时间以及格式化类是线程不安全的,你知道怎么编写测试代码吗?

学习Java过程中可能遇到问题和困惑,关注我vx公众号 “cruder” ,后台留言,笔者帮你一起解决!(需要学习资料的请关注后后台留言,主要都是java相关,java基础,并发,mysql,redis,es,mq等都都有!)

都9012了,Java8中的日期时间API你还没有掌握?

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwyxyp.html