0%

AQS简介

AbstractQueueSynchronizer,是java.util.concurrent中最重要的类,是许多常用的并发工具类的基础,ReentrantLock、CountDownLatch、Semaphore、FutureTask 等都是在AQS抽象类的基础上实现而来。 学习AQS源码有助于更好的理解并发工具类的实现原理,对写出更高效、健壮的代码很有帮助。

阅读全文 »

为什么用ELK

当前公司项目部署在十几台服务器上。 通过tail、grep等命令直接去每台服务器查日志很不方便。给开发团队每个成员维护日志查询账号也很麻烦。 希望能有一套集中的日志系统,方便开发人员查询日志,定位问题,也方便运维对异常日志进行监控。

阅读全文 »

周六收到服务器告警,线上一台32G服务器的内存占用90%+,远远超出JVM设置的内存-Xmx8192m
top命令查看线上进程信息,发现一个java进程占用内存达到26G

阅读全文 »

G1是一款面向服务端应用的垃圾收集器,HotSpot开发团队设计用来取代CMS收集器,特点是追求低并且可控(预测)的停顿时间、在此基础上尽可能提高系统吞吐量。

阅读全文 »

《深入理解JAVA虚拟机》部分概念整理,内存结构、垃圾收集、内存分配。

阅读全文 »

四种事务模式

AT

个人理解:一阶段各个分支提交本地事务、如果有任一分支事务一阶段失败,则二阶段各分支回滚数据,否则标记AT事务成功(二阶段成功)。 通过本地数据库事务配合实现,中间要考虑脏读、脏写的问题

阅读全文 »

问题背景

实际开发场景中,可能需要处理并发线程互斥地访问某个共享资源。 Java中通常用synchronized、Lockd来加锁,避免多线程中由于竞争导致的数据不一致问题。

问题是Java中的锁,只在同一JVM环境下才生效。

分布式系统中,应用部署在多台服务器。这时候需要使用分布式锁,利用一个第三方节点来获取/释放锁。

分布式锁实现方式有数据库、redis、zookeeper等,基本原理是一样的:标识锁状态+锁的唯一持有者。 这里只介绍单节点下redis实现
两种架构下锁示意图

阅读全文 »

原则

创建型模式

简单工厂

最简单的创建型模式,工厂类提供静态方法,根据不同参数构造对象

阅读全文 »