作为最为流行的ORM框架之一,Mybatis一直占据着半壁江山。 得益于Mybatis极其灵活的SQL书写规则和很方便的接口方式,Mybatis在灵活性与功能、易用性上取得了较好的平衡。 知其所以然是每个程序员都应该努力掌握的技巧,本系列文章将逐步分析Mybatis整个源码包, 理清这个“短小精悍”的库的实现原理。
本节聚焦于Mybatis(3.4.5版本)整体架构,将理清Mybatis主要有哪些模块,主要的架构。
作为最为流行的ORM框架之一,Mybatis一直占据着半壁江山。 得益于Mybatis极其灵活的SQL书写规则和很方便的接口方式,Mybatis在灵活性与功能、易用性上取得了较好的平衡。 知其所以然是每个程序员都应该努力掌握的技巧,本系列文章将逐步分析Mybatis整个源码包, 理清这个“短小精悍”的库的实现原理。
本节聚焦于Mybatis(3.4.5版本)整体架构,将理清Mybatis主要有哪些模块,主要的架构。
##基本概念volatile
是Java语言提供的一种synchronized
的弱化版本- volatile
变量的内存可见性得到保证。也就是说对 volatile
变量的更改对其他所有线程都是可见的,不需要 synchronized
。当一个变量被声明为 volatile
,编译器和运行时(JVM、OS等)都注意到这个变量是被共享的,这个变量上的操作不应该和其他内存操作一起被重排序。 volatile
变量不会被缓存在寄存器或则缓存(L1,L2等)上(缓存会使得变量对于其他核心不可见),所以说对一个 volatile
变量的读写总会获得最新的值。(多线程环境下对普通变量很可能获得的是最近的某一个值,而不一定是最新的。可以参考java内存模型)
这个词在Java并发编程中还算常见,那么它到底是什么呢?<!--more-->在正式讨论```CAS(Compare And Swap)```策略和它是如何被```Atomic```使用之前,先看如下代码: public class MyApp{ private volatile int count = 0; public void upateVisitors() { ++count; //increment the visitors count ...
##基础使用 基本上Java程序员都简单的了解synchronized的使用: 无非就是用在多线程环境下的同步。 看如下简单的例子: public class UnsafeCounter { private int count=0; public int getAndIncrement() { return this.count++; }} 上面是一个简单的非常常见的POJO类,在多线程环境下的测试代码:public cl ...