试剑江湖。
做你没做过的事叫成长,做你不愿意做的事叫改变,做你不敢做的事叫突破。
展开
-
Java 并发编程之synchronized
在并发编程中,多个线程访问同一个共享资源时,我们必须考虑如何维护数据的原子性。在JDK1.5之前,Java是依靠Synchronized关键字实现锁功能来做到这点的。Synchronized是JVM实现的一种内置锁,锁的获取和释放是由JVM隐式实现。到了JDK1.5版本,并发包中新增了Lock接口来实现锁功能,它提供了与Synchronized关键字类似的同步功能,只是在使用时需要显式获取和释放锁。原创 2025-03-01 18:39:53 · 1098 阅读 · 0 评论 -
Java并发编程之AQS
AQS是AbstractQueueSynchronizer是缩写,其意思就是抽象队列同步器。原理就是通过一个FIFO队列维护一个state同步状态值,只需要继承该抽象类重写对应的方法便可实现一套线程同步机制。AQS抽象类在java.util.concurrent.locks包下定义。如上图所示,AQS属于一个抽象类,主要是用来构建锁结构以及同步器的一个抽象类。AQS继承了AbstractOwnableSynchronizer,其作用为设置和获取独占锁的拥有者线程方法。原创 2025-03-01 21:49:46 · 1521 阅读 · 0 评论 -
Java基础之异或(^)运算
异或运算的时间复杂度为 O ( 1 ) O(1)O(1),因为它是一个按位操作,仅需常数时间。基本性质:交换律、结合律、自反性等。应用场景:交换变量、查找唯一数、判断符号等。优势:高效、简洁,特别适用于数组、整数处理相关问题。理解和熟练运用异或操作,对于掌握算法优化、数论相关题目非常重要。原创 2025-04-22 22:00:00 · 604 阅读 · 0 评论 -
Java并发编程之CompletableFuture原理与实践
在Java并发编程中,CompletableFuture是一个强大而灵活的工具。今天,我们将深入探讨它的实现原理、最佳实践,以及面试中的重要考点。CompletableFuture是Java并发编程中的重要工具,它通过巧妙的设计提供了强大的异步编程能力。深入理解其实现原理掌握正确的使用方式注意性能优化实践异常处理合理进行任务编排相关材料CompletableFuture原理与实践-外卖商家端API的异步化。原创 2025-04-23 23:00:00 · 443 阅读 · 0 评论 -
Java虚拟机之GC收集器对比解读
Java 虚拟机提供了多种垃圾收集器(Garbage Collector, GC),每种收集器都有其特定的设计目标和适用场景。JVM 的垃圾收集器主要分为两大类:分代收集器和分区收集器,分代收集器的代表是 CMS,分区收集器的代表是 G1 和 ZGC,下面我们来看看这两大类的垃圾收集器。原创 2025-04-21 21:00:00 · 476 阅读 · 0 评论 -
Java虚拟机之JVM垃圾回收机制(GC)
JVM的垃圾回收机制:GC,是Java提供的对于内存自动回收的机制。原创 2025-03-05 08:30:00 · 971 阅读 · 0 评论 -
Java虚拟机之JVM内存模型
Java内存模型(Java Memory Model ,JMM)是jvm的一种规范,定义了jvm的内存模型。它屏蔽了各种硬件和操作系统的访问差异,不像c那样直接访问硬件内存,相对安全很多,它的主要目的是解决由于多线程通过共享内存进行通信时,存在的本地内存数据不一致、编译器会对代码指令重排序、处理器会对代码乱序执行等带来的问题。可以保证并发编程场景中的原子性、可见性和有序性。原创 2025-03-04 00:47:37 · 1105 阅读 · 0 评论 -
Java并发编程之ReentrantLock
ReentrantLock 是 Java 并发编程中一种重要的同步机制,它比传统的 synchronized 提供了更高的灵活性和功能。下面将从 ReentrantLock 的基本原理、详细使用方法、内部实现机制、注意事项等方面详细说明。ReentrantLock 是基于可重入的概念设计的锁。当一个线程已经获取了 ReentrantLock 锁,它可以再次进入该锁的同步代码块而不会陷入死锁。这是因为 ReentrantLock 记录了每个线程获取锁的次数,并允许同一线程多次获取它。线程获取锁的次数与释放锁的原创 2025-03-01 20:21:36 · 471 阅读 · 0 评论 -
Java并发编程之ThreadLocal认识和原理
通过当前线程对象 thread 获取该 thread 所维护的 ThreadLocalMap,如果 ThreadLocalMap 不为 null,则以 ThreadLocal 实例为 key,值为 value 的键值对存入 ThreadLocalMap,若 ThreadLocalMap 为 null 的话,就新建 ThreadLocalMap,然后再以 ThreadLocal 为键,值为 value 的键值对存入即可。原创 2025-03-04 09:00:00 · 844 阅读 · 0 评论 -
Java并发编程之ConcurrentHashMap的原理和使用
ConcurrentHashMap(CHM) 是 Java 并发包中实现线程安全的哈希表,其核心设计目标是在高并发场景下兼顾性能与线程安全。与 HashTable 的全表锁不同,CHM 通过分段锁(JDK7)和CAS+synchronized细粒度锁(JDK8+) 实现高效并发控制,解决了传统同步容器的性能瓶颈。锁粒度细化:从分段锁(JDK7)到桶锁(JDK8)的演进;无锁化设计:CAS操作降低线程阻塞概率;数据结构优化:红黑树替代长链表提升查询效率;原创 2025-03-02 23:57:03 · 898 阅读 · 0 评论 -
Java并发编程之可见性、原子性和有序性
可见性是一个线程对共享变量的修改,另一个线程能够立刻看到,如果不能立刻看到,就可能会产生可见性问题。在单核CPU上是不存在可见性问题的,可见性问题主要存在于运行在多核CPU上的并发程序。归根结底,可见性问题还是由CPU的缓存导致的,而缓存导致的可见性问题是导致诸多诡异的并发编程问题的“幕后黑手”之一。我们只有深入理解了缓存导致的可见性问题,并在实际工作中时刻注意避免可见性问题,才能更好的编写出高并发程序。原创 2025-03-01 16:53:01 · 274 阅读 · 0 评论 -
Java并发编程之线程池的原理和实践
线程池的核心思想是预先创建一定数量的线程,并把它们保存在线程池中,当有任务需要执行时,线程池会从空闲线程中取出一个线程来执行该任务。任务执行完毕后,线程不是被销毁,而是返还给线程池,可以立即或稍后被再次用来执行其他任务。这种机制可以避免因频繁创建和销毁线程而带来的性能开销,同时也能控制同时运行的线程数量,从而提高系统的性能和资源利用率。线程池的主要组成部分包括工作线程、任务队列、线程管理器等。线程池的设计有助于优化多线程程序的性能和资源利用,同时简化了线程的管理和复用的复杂性。原创 2025-03-08 09:00:00 · 948 阅读 · 0 评论 -
Java并发编程之HashMap的设计
HashMap通过哈希表数据结构的形式来存储键值对,这种设计的好处就是查询键值对的效率高。我们在使用HashMap时,可以结合自己的场景来设置初始容量和加载因子两个参数。当查询操作较为频繁时,我们可以适当地减少加载因子;如果对内存利用率要求比较高,我可以适当的增加加载因子。我们还可以在预知存储数据量的情况下,提前设置初始容量(初始容量=预知数据量/加载因子)。这样做的好处是可以减少resize()操作,提高HashMap的效率。原创 2025-03-02 07:30:00 · 1141 阅读 · 0 评论 -
Java基础之== 和 equals() 的主要区别
= 是Java中的一个基本操作符,用于比较两个对象的引用是否相同(对于引用类型)或两个基本类型的值是否相等(对于基本类型)。equals() 是Java Object 类中的一个方法,用于比较两个对象的内容是否相等。默认情况下,它比较的是对象的引用,但在很多类中(如 String、Integer 等),该方法已被重写以提供类特定的比较逻辑。1)== : 对于引用数据类型==比较的是内存地址是否相等,对基本数据类型==比较的是值是否相等。原创 2025-03-02 15:07:38 · 172 阅读 · 0 评论 -
Java基础之Integer使用和实践
我们知道Java是面向对象的语言,号称一切皆对象,但是有8种原始数据类型(boolean、byte 、short、char、int、float、double、long)需要除排除在外。本文就以原始数据类型int和其包装类Integer为例进行讲解,主要包含以下几个方面的内容:Integer的不可变性;自动装箱和自动拆箱(boxing/unboxing);Integer的缓存值;使用Integer注意的事项等。如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对象就是不可变的。原创 2025-03-06 07:15:00 · 727 阅读 · 0 评论 -
Java基础之字符串优化性能
String对象是我们日常工作中使用最频繁的对象,它的性能问题也是我们最容易忽略的。String对象作为Java语言中最重要的数据类型,是内存中占据空间最大的对象,高效地使用字符串,可以提升系统的整体性能。今天这篇文章我们从String对象的实现、特性以及实际使用中的优化三方面,来深入了解String对象。原创 2025-03-02 15:07:11 · 1031 阅读 · 0 评论