- 博客(10)
- 收藏
- 关注
原创 CopyOnWriteArrayList
机制实现了读操作的无锁并发,适合读多写少的高并发场景,但其写操作的高内存开销和弱一致性特点需谨慎评估。在实际应用中,需结合业务需求权衡性能与一致性,合理选择并发容器。
2025-03-06 17:45:13
1825
原创 原子类 CAS 与 AtomicInteger 底层实现
是一种无锁(Lock-Free)并发控制机制,通过硬件指令保证操作的原子性。是 Java 提供的原子整数类,基于 CAS 实现线程安全的原子操作。的变化,CAS 无法感知中间状态。每次更新递增版本号,确保值变化的唯一性。Java 提供多种原子类,原理与。ABA 问题指变量值经历了。维护值和版本号的双重校验。:原子递增并返回旧值。
2025-03-05 17:00:00
2051
原创 Java 基础
本节全面解析了 Java 程序的结构设计、运行机制及底层原理,涵盖编译、类加载、内存管理、跨平台实现等核心内容,并提供了代码示例与高频面试题解析。理解这些机制是掌握 Java 高级特性的基础,也是优化程序性能和排查问题的关键。
2025-03-04 15:41:56
441
转载 什么是双亲委派模型
双亲委派模型是和 Java 中多个类加载器(启动类加载器、扩展加载器、应用程序类加载器)的运行规则,通过这个(双亲委派模型)规则可以避免类的非安全问题和类被重复加载的问题,但它也遇到了一些问题,比如 JNDI 和 JDBC 不能通过这个规则进行加载,它需要通过打破双亲委派的模型的方式来加载。那么双亲委派模型究竟说的是啥呢?使用双亲委派模型也可以避免一个类被重复加载,当一个类被加载之后,因为使用的双亲委派模型,这样不会出现多个类加载器都将同一个类重复加载的情况了。双亲委派模型的优点有两个: 1、安全。
2025-03-03 17:56:56
46
转载 JIT 即时编译的原理
这个例子模拟了动态代码在内存上的生成,和之后的运行。或者换个句式讲,IOS封了内存(或者堆)的可执行权限,相当于变相的封锁了JIT这种编译方式。一个程序在它运行的时候创建并且运行了全新的代码,而并非那些最初作为这个程序的一部分保存在硬盘上的固有的代码。下面我们就模拟一下执行新生成的机器码的过程。需要提醒的是第三点,也就是 JIT不光是生成新的代码,它还会运行新生成的代码。2.生成的代码是新的代码,并非作为原始程序的一部分被存在磁盘上的那些代码。JIT这么好,那它是如何实现既生成新代码,又能运行新代码的呢?
2025-03-02 16:23:13
126
原创 volatile与内存屏障
若操作A happens-before B,B happens-before C,则A happens-before C。if (instance == null) { // 第一次检查。if (instance == null) { // 第二次检查。// 可能发生指令重排序。if (x == 0 && y == 0) { // 出现则证明发生重排序。// 此处可能重排序为:x = b;// 此处可能重排序为:y = a;实战:验证指令重排序。
2025-03-02 15:03:05
952
原创 Java 死锁及破除死锁示例
死锁是指多个线程在运行过程中因争夺资源而陷入相互等待的状态,导致程序无法继续执行。死锁的发生需要满足以下四个必要条件互斥条件:资源只能被一个线程占用。持有并等待:线程持有至少一个资源,同时等待其他资源。不可抢占:线程已持有的资源不能被强制剥夺。循环等待:存在线程间的循环等待链,如 A 等 B,B 等 A。方法优点缺点固定锁顺序实现简单,无额外开销不适用于动态锁获取场景超时机制(tryLock灵活,避免无限等待代码复杂度增加资源分配策略(银行家算法)理论安全实现复杂,适用性有限。
2025-02-28 21:33:25
553
原创 找不到com.mchange.v2.c3p0.ComboPooledDataSource
c3p0爆红,可能原因一、jar包未导入或导入错误c3p0-0.9.2.1.jarmchange-commons-java-0.2.3.jar这两个包或者c3p0-0.9.5.2.jar建议去maven找会方便很多二、依赖导入问题解决方法:File->Project Structure->Modules->右面加号->找到你要导入的jar包...
2022-03-01 20:17:32
3788
1
原创 关于idea项目启动失败的tomcat配置问题Error running ‘MIMI‘: Address localhost:1099 is already in use
关于idea项目启动失败的tomcat配置问题Error running 'MIMI': Address localhost:1099 is already in useError running 'MIMI': Unable to open debugger port (127.0.0.1:8156): java.net.SocketException "Interrupted function call: accept failed"
2021-12-24 22:20:36
779
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅