JUC - AbstractQueuedSynchronizer(AQS) 源码分析

AbstractQueuedSynchronizer,同步器,以下简称AQS。本文从源码分析AQS的核心方法和实现原理。

AQS内部有两组重要的成员变量:

  1. int类型的status变量,通过CAS操作(详见:CAS深度分析)改变status值来控制当前线程能否访问资源以及并发数量。

  2. Node类型的head和tail两个变量,两个变量维护了一个FIFO的同步队列,将获取访问权限失败的线程构造成Node节点加入队列中,释放资源时再来唤醒队列中阻塞的线程。(Node类型主要包涵节点的状态,当前线程的引用,以及前驱节点和后置节点的引用)

阅读全文

线上FullGC频繁问题的排查过程及解决方案

背景

最近正在上线一个新系统,系统主要功能是通过接受报价MQ,MQ内部带着的一个缓存Key,通过Key可以从redis里获取对应的一组报价信息,根据一定业务维度提取出最低价,缓存在我们系统自己内部的redis中做一个低价缓存,从而提供低价数据。消息QPS在10K左右,服务响应时间在毫秒级。

阅读全文

Git常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
git init 通过git init命令创建一个Git可以管理的仓库
liuxin@liuxin-ProBook:~/Work/test$ git init gittest
初始化空的 Git 版本库于 /home/liuxin/Work`/test/gittest/.git/
liuxin@liuxin-ProBook:~/Work/test$ cd gittest/
liuxin@liuxin-ProBook:~/Work/test/gittest$ ll
总用量 12
drwxrwxr-x 3 liuxin liuxin 4096 5月 13 10:42 ./
drwxrwxr-x 3 liuxin liuxin 4096 5月 13 10:42 ../
drwxrwxr-x 7 liuxin liuxin 4096 5月 13 10:42 .git/
git clone git@server-name:path/repo-name.git 克隆远程仓库到本地
git remote add origin git@server-name:path/repo-name.git 将本地仓库关联一个远程仓库
git add readme.txt把文件修改添加到暂存区
git add .把所有文件修改添加到暂存区
git add -A把所有文件修改添加到暂存区
git commit -m 'message' 把暂存区的所有内容提交到当前分支,一定要带提交日志

阅读全文

Spring AspectJ事务

当事务管理使用的是代理形式,仅有在公有方法上标记的@Transactional是有效的,所有的私有的、受保护的或者包可见性的方法即使标记了@Transactional也不会有实质性的事务管理行为产生,并且系统不会给出任何错误或者提示信息。如果有必要在非公有方法上标记事务,那么不应当使用代理模式的事务管理,可以考虑使用AspectJ。

阅读全文

Tomcat单机部署多实例

单Tomcat部署多实例有以下优点:

1、所有项目只应用单一Tomcat,对于项目启动、Tomcat升级可一次性解决,不需要更改过多配置

2、单一Tomcat日志存储不再是问题,可统一跟踪及处理

3、多实例无依赖,可做到单实例下线或维护,不影响其它实例运行,方便管理

4、对多实例间单例不会造成任何影响

5、可实现自定义单一实例热加载热部署,不会对其它实例造成影响

阅读全文