53 归档分页
370 留言互动
4 核心专题

最近更新

Java 2021-11-04

脏写、脏读、不可重复读和幻读

文章说明并发事务会产生脏写、脏读、不可重复读和幻读四类并发问题,并通过示例阐明其产生原因:未提交事务被其他事务读写导致数据回滚或结果不一致。随后介绍事务隔离机制和四种隔离级别(READ‑UNCOMMITTED、READ‑COMMITTED、REPEATABLE‑READ、SERIALIZABLE),说明各级别对上述现象的防护能力,并指出 MySQL 默认使用 REPEATABLE‑READ。

MySQL 阅读全文
源码 2021-11-03

AQS源码分析

AQS(AbstractQueuedSynchronizer)通过 volatile 的 state 与 CLH 双向链表实现同步,维护 head、tail 指向的等待队列。它支持独占和共享两种模式,核心方法 acquire/release 与 acquireShared/releaseShared 采用模板方法,子类只需实现 tryAcquire/tryRelease 或对应的共享 try 方法。Node 类保存线程、前后指针、waitStatus(CANCELLED、SIGNAL、CONDITION、PROPAGATE)等信息。文中以自定义 Mutex 为例展示独占同步器的实现,包括 tryAcquire、tryRelease、ConditionObject 的使用,并分析 acquire、addWaiter、enq 等源码流程,说明线程如何加入等待队列并竞争资源。

多线程 阅读全文
Java 2021-11-03

isAssignableFrom()方法与instanceof关键字

isAssignableFrom()和instanceof都用于类型判断,但侧重点不同。isAssignableFrom()在类层面比较,调用者是父类Class,参数是子类或自身Class,用于判断一个类是否可以赋值给另一个类;instanceof在实例层面比较,左侧是对象实例,右侧是其类或父类类型,用于判断对象是否是某类或其子类的实例。文章通过接口、父类、子类的代码示例展示两者的调用方式和输出结果,说明isAssignableFrom()判断“是否为父类”,instanceof判断“是否为子类”。

反射 阅读全文
Java 2021-10-27

Spring AOP底层原理

Spring AOP 通过动态代理实现横向切面功能。若目标对象实现接口,Spring 使用 JDK Proxy 创建与接口同级的代理对象;若未实现接口,则采用 CGLIB 生成目标类的子类作为代理。代理对象在运行时拦截方法调用,实现与原实现类相同的功能,而无需修改源代码,从而完成 AOP 的横向扩展。

Spring 阅读全文
Java 2021-11-01

JVM之RTTI与反射

RTTI(运行时类型识别)通过获取 Class 对象来在运行时获取已知类的完整信息,获取方式包括 Class.forName、.class 和对象的 getClass(),前者会立即初始化类,后者在首次使用静态成员时才初始化。反射则用于编译时未知的类:在运行时加载对应的 .class 文件后,可通过 Class 的 getMethods、getConstructors 等获取 Method、Constructor 对象并实例化对象。核心区别在于 RTTI 需要编译期已知类名并在编译时检查 .class,而反射在运行时才打开并检查 .class,实现对未知类型的动态操作。

JVM 反射 阅读全文
Java 2021-11-01

getField和getDeclaredField的区别

getField只能获取public字段并包括父类继承的成员,而getDeclaredField只能获取本类声明的所有字段(包括private),但不返回继承字段;对private字段需调用setAccessible(true)才能读写。示例中通过反射分别操作Person的private age和public money,得到相应的初始值并成功修改。文章还概括了反射的优点——运行时动态获取类、提升灵活性和可与动态编译结合实现强大功能;缺点——性能开销大、相对不安全且破坏封装。

反射 阅读全文