
Java核心技术
文章平均质量分 96
本专栏聚焦Java核心技术,深入剖析多线程与线程池机制、IO与NIO模型等底层原理,结合源码与实战场景,帮助读者夯实基础,提升工程能力。适合有一定Java基础、希望突破技术瓶颈的开发者。
讲文明的喜羊羊拒绝pua
拥有8年Java后端与大数据平台开发经验,曾在大疆等知名公司主导核心平台建设,具备丰富的架构设计与落地能力。擅长调度系统、存算分离湖仓架构与组件容器化,推动多个系统实现高可用、易扩展。在技术上,深入掌握Java并发编程与JVM调优,熟悉Spark、Flink、Kafka等大数据组件,具备DS、Amoro、Celeborn等开源项目贡献经验,具备强实战力与技术深度。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java多线程并发编程系列-08 异步编程 FutureTask、CompletableFuture原理
本文介绍了Java异步编程中的FutureTask类及其应用和源码分析。FutureTask是一个可取消的异步任务类,实现了RunnableFuture接口,既能作为Runnable被线程执行,又能作为Future获取任务结果。文章通过示例展示了FutureTask的四种典型应用场景:任务状态监控、阻塞获取结果、超时获取结果以及任务重复执行控制。在源码分析部分,重点解读了FutureTask的核心状态流转机制(NEW/COMPLETING/NORMAL等7种状态)以及关键方法实现:run()方法执行任务并处原创 2023-09-11 22:58:49 · 399 阅读 · 0 评论 -
Java多线程并发编程系列-07 JUC并发工具CountDownLatch、CyclicBarrier、Semaphore原理
CountDownLatch是JUC包下的并发工具,基于AQS实现计数器功能,用于等待多个并行任务完成。核心机制:初始化时设置计数器值,每个任务完成后调用countDown()使计数器减1;主线程通过await()阻塞等待计数器归零后被唤醒。源码分析显示其内部类Sync继承AQS,state存储计数器值,await()在state非0时将线程加入AQS队列并挂起,countDown()通过CAS减state并在归零时唤醒等待线程。适用于需要等待多个并行任务全部完成的场景,如文中示例的三个并行任务处理。原创 2023-09-10 19:47:39 · 232 阅读 · 0 评论 -
Java多线程并发编程系列-06 并发集合 ConcurrentHashMap、CopyOnWriteArrayList原理
本文详细介绍了ConcurrentHashMap在JDK1.8中的线程安全实现机制,包括其存储结构(数组+链表+红黑树)和核心操作方法。重点分析了putVal方法的实现细节,如散列算法、数组初始化的DCL+CAS机制、链表操作的synchronized同步策略,以及扩容协助机制。文章还对比了与HashMap的区别,如不允许null值、特殊的hash值处理等,并解释了关键参数sizeCtl的作用。通过源码分析展示了ConcurrentHashMap如何通过CAS和synchronized实现高效并发操作原创 2023-09-09 23:31:16 · 597 阅读 · 0 评论 -
Java多线程并发编程系列-05 线程池 ThreadPoolExecutor 原理
线程池是一种管理多线程任务执行的机制,通过复用线程减少系统开销。JDK提供了三种常见线程池: FixedThreadPool:固定线程数的线程池,任务提交时若线程未满则创建线程,否则放入无界队列等待执行。 SingleThreadExecutor:单线程池,保证任务顺序执行,适用于需要顺序处理的业务场景。 CachedThreadPool:弹性线程池,任务提交时若无空闲线程则创建新线程,空闲线程60秒未使用会被回收,适合短时高并发任务。 使用线程池需注意: 避免线程泄漏,局部线程池使用后需调用shutdow原创 2023-09-09 15:50:32 · 199 阅读 · 0 评论 -
Java多线程并发编程系列-04 阻塞队列实现原理
本文介绍了阻塞队列的核心概念和ArrayBlockingQueue的实现原理。主要内容包括:生产者-消费者模式通过队列解耦,JUC包中BlockingQueue提供的存取方法(add/offer/put等),以及ArrayBlockingQueue的具体实现。重点分析了ArrayBlockingQueue的底层数据结构(数组)、线程安全机制(ReentrantLock)和条件变量(Condition)的使用,详细解读了生产者添加数据的enqueue方法和消费者获取数据的dequeue方法实现过程,包括队列满原创 2023-09-03 20:39:00 · 2345 阅读 · 0 评论 -
Java多线程并发编程系列-03 锁的分类、synchronized、ReentrantLock、ReentrantReadWriteLock
本文系统梳理了Java中锁的分类及synchronized的实现原理。锁可分为可重入/不可重入锁、乐观/悲观锁、公平/非公平锁、互斥/共享锁等类型。重点分析了synchronized的优化机制,包括锁消除、锁膨胀和锁升级(无锁→偏向锁→轻量级锁→重量级锁)。通过对象头MarkWord详细说明了synchronized的实现原理,并借助JOL工具展示了锁升级过程。最后解析了重量级锁底层ObjectMonitor的核心属性,揭示了synchronized的线程竞争机制。文章全面深入地讲解了Java锁机制的关键技原创 2023-08-31 23:02:55 · 319 阅读 · 0 评论 -
Java多线程并发编程系列-02 并发编程的三大特性:原子性、可见性、有序性
并发编程的三大特性之一是原子性,指一个操作不可分割、不可中断。Java通过JMM(Java内存模型)屏蔽硬件差异,保证跨平台一致性。原子性问题常出现在多线程操作共享变量时,如count++操作实际分三步执行,导致结果不符合预期。保证原子性的方法包括:1)synchronized关键字同步代码块;2)CAS(比较交换)操作,如AtomicInteger类,但存在ABA问题和自旋过长问题;3)Lock锁如ReentrantLock;4)ThreadLocal让线程操作各自数据。其中CAS可通过AtomicSta原创 2023-08-25 21:54:29 · 241 阅读 · 0 评论 -
Java多线程并发编程系列-01 线程基本概念、创建、使用
本文介绍了并发编程中线程的基本概念与使用方式。首先阐述了进程与线程的区别,指出线程是CPU调度的基本单位,而进程是资源分配的单位。接着分析了多线程的优势(提高CPU利用率)和局限性(线程安全问题、切换开销)。文章对比了串行、并行和并发的概念,并详细讨论了同步/异步、阻塞/非阻塞四种组合模式。在实践部分,介绍了三种创建线程的方法:继承Thread类、实现Runnable接口、实现Callable接口配合FutureTask,以及线程池方式。最后解析了Java线程的6种状态(NEW、RUNNABLE、BLOCK原创 2023-08-24 22:14:14 · 342 阅读 · 0 评论 -
Java多线程并发编程系列-00 线程池原理与自定义实现线程池
本文探讨了Java多线程并发编程中的线程池原理与实现。多线程的核心目的是充分利用CPU资源并发执行任务,但线程并非越多越好,需权衡创建/销毁开销、内存消耗及上下文切换成本。线程池通过固定数量的工作线程和任务队列(BlockingQueue)实现高效任务调度:任务提交到队列,空闲线程获取任务执行。针对计算型与IO型任务,线程数需动态调整(如CPU核数的1-2倍或更高)。文中还实现了一个简易线程池(FixedSizeThreadPool),包含任务队列、工作线程集合及关闭逻辑,并对比了阻塞(put/ta原创 2019-04-14 00:04:34 · 3143 阅读 · 1 评论 -
Java网络编程Netty系列-01 基础原理与应用场景
Netty是一款基于Java的高性能异步网络框架,广泛应用于互联网、游戏、大数据等领域。它采用事件驱动模型,支持高并发网络通信,是构建RPC框架和分布式系统的理想选择。文章详细对比了Java BIO(同步阻塞)、NIO(同步非阻塞)和AIO(异步非阻塞)三种IO模型的特点与适用场景,并通过代码示例演示了BIO的线程池实现。NIO通过多路复用技术显著提升了系统性能,而Netty正是基于NIO构建,能有效解决传统BIO的线程资源浪费问题,适用于需要处理大量短连接的场景。原创 2020-06-20 10:24:53 · 601 阅读 · 0 评论 -
IO模型、IO多路复用
Linux IO多路复用技术解析摘要: 本文系统介绍了Linux系统中的IO多路复用技术。首先阐述了用户空间与内核空间的区别,以及PIO与DMA两种数据传输方式的优劣。重点分析了缓存IO和直接IO的工作机制及适用场景,其中缓存IO通过内核缓冲区减少磁盘访问次数,而直接IO则适用于数据库等需要自主管理缓存的场景。在网络IO部分,详细描述了数据从磁盘到网卡的多阶段传输过程,包括内核空间与用户空间之间的数据拷贝。最后通过Socket编程示例展示了网络IO的具体实现方式。文章还对比了磁盘IO和网络IO的延迟差异,为原创 2020-09-14 22:11:46 · 8300 阅读 · 0 评论 -
Java网络编程Netty系列-03 核心源码分析与自定义实现RPC
本文分析了Netty 4.1.36版本的核心源码,重点研究了服务器启动过程和NioEventLoopGroup的实现机制。通过Echo程序Demo的启动类分析,详细解读了EventLoopGroup的创建过程、线程模型设计原理,以及ServerBootstrap引导类的配置流程。源码分析表明,NioEventLoopGroup采用抽象模板设计模式,通过MultithreadEventExecutorGroup构造器创建线程执行器数组,每个元素都是NioEventLoop实例。启动过程中,Netty会初始化b原创 2020-06-25 19:31:42 · 532 阅读 · 0 评论 -
Java网络编程Netty系列-02 从Reactor模型到粘包拆包全流程解析
Netty是一个高性能异步事件驱动的网络应用框架,用于快速开发高可靠性的网络程序。相比原生NIO,Netty解决了API复杂、多线程编程难度大等问题,提供了统一API、灵活线程模型和高效内存管理等优势。其核心采用主从Reactor多线程模型改进版,通过MainReactor处理连接请求,SubReactor处理I/O事件,结合线程池实现高并发处理。该架构既避免了单线程性能瓶颈,又解决了多线程数据共享的复杂性,支持弹性扩展,被广泛应用于互联网、分布式系统等领域。Netty社区活跃,版本迭代快,是当前最流行的N原创 2020-06-21 20:56:03 · 1137 阅读 · 1 评论 -
Java通讯模型之 BIO、NIO、AIO程序实现
Java通讯模型演进:从BIO到NIO 摘要:本文介绍了Java网络通讯的三种主要模型。BIO(同步阻塞IO)是最早的实现方式,每个线程处理一个客户端连接,存在性能瓶颈。NIO(同步非阻塞IO)通过Buffer和Channel技术提升了效率,采用Reactor模型实现公共注册和统一操作。文章通过一个ECHO程序案例,对比展示了BIO和NIO的服务器端实现代码,分析了各自的优缺点。BIO模型简单但资源消耗大,而NIO模型更适合高并发场景。文章还探讨了未来开发人才应具备的技能,强调理解底层通讯机制的重要性。原创 2020-08-04 09:23:50 · 193 阅读 · 0 评论