“Simplicity is prerequisite for reliability.”
工作中负责了一个和数据源交互很重的模块,并独立开启重写任务。其中一个很重要的变化就是将 15 年源代码中所采用的一代 DBCP 换成 HikariCP。因为这个模块与池的交互实在太深了,所以我必须要比常人对 HikariCP 有更好的理解,所以想写一篇纪要进行总结,文章很多内容来自《HikariCP数据库连接池实战》。
CopyOnWriteArrayList
: 基于写时复制策略的线程安全的 List;
ConcurrentHashMap
:由分段锁(jdk7)实现发展为 CAS+synchronized+红黑树(jdk8) 的线程安全的 Map;
CountDownLatch;CyclicBarrier;Semaphore;Exchanger
ReentrantLock;ReentrantReadWriteLock;StampedLock
回顾 Java Lock 基础,详细介绍了
AbstractQueuedSynchronizer
的实现;并说明了Condition
的原理以及LockSupport
的底层作用。
需求:针对某些DB不同版本的冲突问题,采用自定义类加载器的方式自行加载 Driver,驱动包放至 jdbc module 下,而 web module 在使用 Spring Boot 打成 jar 包后,需要获取到内部 jdbc module 中的驱动包。Spring Boot jar 包启动时,自定义类加载需要能够读到驱动包资源。
“与那些在编译时需要进行连接工作的语言不同,在Java语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成的,这种策略虽然会令类加载时稍微增加一些性能开销,但是会为Java应用程序提供高度的灵活性,Java里天生可以动态扩展的语言特性就是依赖运行期动态加载和动态连接这个特点实现的。”
Java内存模型:三种特征(原子性/可见性/有序性)、as-if-serial语义、重排序、Happens-Before、volatile
并发基础概念;线程基础:状态、构造、终止、中断、线程组、守护线程、优先级;等待通知机制;join();yield();synchronized