AngusLean Blog

  • Home

  • Categories

  • Archives

  • Tags

  • About

MyBatis源码分析(1)- 基础架构

Posted on 2017-11-23 | Edited on 2017-12-07 | In Programming Language , Java , Framework , MyBatis

作为最为流行的ORM框架之一,Mybatis一直占据着半壁江山。 得益于Mybatis极其灵活的SQL书写规则和很方便的接口方式,Mybatis在灵活性与功能、易用性上取得了较好的平衡。 知其所以然是每个程序员都应该努力掌握的技巧,本系列文章将逐步分析Mybatis整个源码包, 理清这个“短小精悍”的库的实现原理。

本节聚焦于Mybatis(3.4.5版本)整体架构,将理清Mybatis主要有哪些模块,主要的架构。

Read more »

Java并发基础(3)-Volatile基本介绍

Posted on 2017-05-04 | Edited on 2018-01-24 | In Programming Language , Java , 并发

##基本概念
volatile是Java语言提供的一种synchronized的弱化版本- volatile变量的内存可见性得到保证。也就是说对 volatile变量的更改对其他所有线程都是可见的,不需要 synchronized。当一个变量被声明为 volatile,编译器和运行时(JVM、OS等)都注意到这个变量是被共享的,这个变量上的操作不应该和其他内存操作一起被重排序。 volatile变量不会被缓存在寄存器或则缓存(L1,L2等)上(缓存会使得变量对于其他核心不可见),所以说对一个 volatile变量的读写总会获得最新的值。(多线程环境下对普通变量很可能获得的是最近的某一个值,而不一定是最新的。可以参考java内存模型)

Read more »

Java并发基础(4)- CAS

Posted on 2017-05-04 | Edited on 2018-02-11 | In Programming Language , Java , 并发

这个词在Java并发编程中还算常见,那么它到底是什么呢?<!--more-->在正式讨论```CAS(Compare And Swap)```策略和它是如何被```Atomic```使用之前,先看如下代码: public class MyApp{ private volatile int count = 0; public void upateVisitors() { ++count; //increment the visitors count ...

Read more »

Java并发基础(2)-Synchronized

Posted on 2017-04-17 | Edited on 2018-01-24 | In Programming Language , Java , 并发

##基础使用 基本上Java程序员都简单的了解synchronized的使用: 无非就是用在多线程环境下的同步。 看如下简单的例子: public class UnsafeCounter { private int count=0; public int getAndIncrement() { return this.count++; }} 上面是一个简单的非常常见的POJO类,在多线程环境下的测试代码:public cl ...

Read more »

Java并发基础(1)-内存模型杂序(JSR133 FAQ)

Posted on 2016-10-18 | Edited on 2018-04-25 | In Programming Language , Java , 并发

什么是Java内存模型?

在多核处理器系统中,处理器通常有一级或者多级的内部缓存(CPU参数中经常看到的L1,L2,L3就是),他们既提高了访问数据的性能(因为数据更接近处理器而不用受内存速度的影响),同时也减少了在共享内存总线时的冲突(因为很多情况下内部缓存就以及缓存了内存的操作)。 处理器缓存可以非常明显的改善性能,但同时它也带来了一个新的挑战。 比如说,当有多个处理器(对于多核处理器就是一个核心)同时访问同一个内存地址的时候,在什么条件下他们看见的是同一个值呢? 因为不同的处理器可能都有自己的缓存, 如何保证多个处理器都必须从内存中去读取该内存地址的数据呢?

Read more »
1…789

cupofish@gmail.com

42 posts
23 categories
27 tags
GitHub
© 2021 cupofish@gmail.com