在之前的内容中已经讲述了 JMM内存模型与volatile,同时也讲述了保障线程安全的 同步互斥 与 异步非阻塞 两种方式,更描述了异步非阻塞中的 CAS 原理以及 CAS 的一些经典问题, 本文接下来继续完成我们的并发版图,了解下什么是 Atomic。
在梳理了Java内存模型的脉络以后,就讲到线程的基本状态,了解线程存在哪些状态才能对线程安全保障有更清晰的认知。其中JUC中线程安全,有 互斥同步与 非阻塞同步 两种方案,本质就是有锁和无锁的区别,在资源竞争比较大的情况下,无锁的性能要远远高于有锁的;说到了锁,那不得不说一下JVM在锁的方面做出的优化,这也是面试常问synchronized锁升级的细节点。
最近项目中不同微服务之间的LocalDateTime时间交互,格式上出现了差异,一个服务入参返参都是默认的 yyyy-MM-dd'T'HH:mm:ss,一个服务定义了全局时间格式,入参与返参是 yyyy-MM-dd HH:mm:ss,导致服务调用失败。正常情况下,所有服务应该做到格式统一,今天我就从源码上,来分析下全局定义时间格式的几种方式。
由于对 SpringBoot 的版本升级,从 knife4j-spring-boot-starter 3.0.3 版本迭代到 knife4j-openapi2-spring-boot-starter 4.2.0 版本,其中 host 与 basePath 参数不能动态修改的问题,结合源码进行扩展。