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.7917.2 LocalDate,LocalDate,LocalDateTime转时间戳
LocalDateTime localDateTime = LocalDateTime.now(); long timestamp = localDateTime.toInstant(ZoneOffset.ofHours(8)).toEpochMilli(); // 打印结果:15753003680997.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等都都有!)