@淡 定
码龄7年
求更新 关注
提问 私信
  • 博客:147,283
    147,283
    总访问量
  • 184
    原创
  • 229
    粉丝
  • 61
    关注
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:北京市
加入CSDN时间: 2018-08-27
博客简介:

weixin_43076660的博客

查看详细资料
个人成就
  • 获得1,157次点赞
  • 内容获得3次评论
  • 获得1,011次收藏
  • 代码片获得270次分享
  • 博客总排名19,395名
  • 原力等级
    原力等级
    5
    原力分
    1,104
    本月获得
    61
创作历程
  • 78篇
    2025年
  • 21篇
    2024年
  • 15篇
    2023年
  • 44篇
    2022年
  • 30篇
    2021年
成就勋章
TA的专栏
  • 并发编程
    17篇
  • bug
    1篇
  • java
    62篇
  • 笔记
    1篇
  • JVM
  • 基础知识
    5篇
  • es
    2篇

TA关注的专栏 2

TA关注的收藏夹 0

TA关注的社区 6

TA参与的活动 1

创作活动更多

AI 镜像开发实战征文活动

随着人工智能技术的飞速发展,AI 镜像开发逐渐成为技术领域的热点之一。Stable Diffusion 3.5 FP8 作为强大的文生图模型,为开发者提供了更高效的图像生成解决方案。为了推动 AI 镜像开发技术的交流与创新,我们特此发起本次征文活动,诚邀广大开发者分享在 Stable Diffusion 3.5 FP8 文生图方向的实战经验和创新应用 本次征文活动鼓励开发者围绕 Stable Diffusion 3.5 FP8 文生图方向,分享以下方面的内容: 1. 技术实践与优化 - Stable Diffusion 3.5 FP8 模型架构解析与优化技巧 - 文生图生成效果的提升方法与技巧 - 模型部署与加速策略,例如使用 Hugging Face、Diffusers 等工具 - 针对特定场景(例如二次元、写实风)的模型微调与定制化开发 2. 应用场景探索 - Stable Diffusion 3.5 FP8 在不同领域的应用案例分享,例如游戏设计、广告创意、艺术创作等 - 利用 Stable Diffusion 3.5 FP8 实现图像编辑、图像修复、图像增强等功能的探索 - 结合其他 AI 技术(例如 NLP、语音识别)构建更强大的应用 3. 创新应用与思考 - 基于 Stable Diffusion 3.5 FP8 的创新应用场景设计 - AI 镜像开发的未来发展方向的思考与展望 - 对 AI 镜像开发伦理、安全等问题的探讨

28人参与 去参加
  • 最近
  • 文章
  • 专栏
  • 代码仓
  • 资源
  • 收藏
  • 关注/订阅/互动
更多
  • 最近

  • 文章

  • 专栏

  • 代码仓

  • 资源

  • 收藏

  • 关注/订阅/互动

  • 社区

  • 帖子

  • 问答

  • 课程

  • 视频

搜索 取消

AQS在锁实现中的应用详解

摘要:本文详解了AQS在锁实现中的应用,重点分析了ReentrantLock、CountDownLatch和Semaphore的核心实现原理。ReentrantLock通过AQS独占模式实现可重入锁,支持公平/非公平策略;CountDownLatch基于共享模式实现一次性计数器;Semaphore采用共享模式管理许可资源。文章通过核心代码展示各组件对AQS状态(state)的不同映射方式,并对比了CountDownLatch与CyclicBarrier的关键差异,包括实现机制、使用场景和功能特性等。
原创
博文更新于 15 小时前 ·
642 阅读 ·
11 点赞 ·
0 评论 ·
22 收藏

volatile 如何保证可见性?

volatile通过内存屏障和禁止重排序机制保证多线程环境下的变量可见性。它强制写操作立即刷新到主内存并使其他线程缓存失效,读操作则直接从主内存获取最新值。相比synchronized,volatile更轻量但不保证原子性,适用于状态标志、单例模式等场景。其核心是JMM规范下的内存语义实现,通过LoadLoad、StoreStore等内存屏障确保操作顺序,同时禁止指令重排序。但需注意volatile不适用于复合操作,复杂并发仍需synchronized或Lock支持。
原创
博文更新于 15 小时前 ·
478 阅读 ·
6 点赞 ·
0 评论 ·
10 收藏

AQS核心原理详解

AQS(AbstractQueuedSynchronizer)是Java并发包的核心框架,通过状态变量和CLH队列实现线程同步。其核心原理包括:1)使用volatile state变量表示同步状态;2)维护CLH双向队列管理等待线程;3)提供独占和共享两种模式(如ReentrantLock和Semaphore);4)采用模板方法模式,由子类实现具体同步逻辑。AQS通过原子操作state和高效线程调度机制,为Java并发工具提供了底层支持。
原创
博文更新于 17 小时前 ·
583 阅读 ·
14 点赞 ·
0 评论 ·
4 收藏

LongAdder与AtomicLong对比分析

LongAdder与AtomicLong对比分析摘要: LongAdder和AtomicLong均为Java高并发计数器实现,但设计理念不同。AtomicLong采用单变量CAS机制,适合低并发场景;而LongAdder通过分段CAS(base+Cell数组)分散热点,显著提升高并发性能。测试显示100线程下LongAdder性能提升6倍以上。关键区别在于:AtomicLong实时返回值但存在热点竞争,LongAdder需调用sum()汇总结果但并发性能更优。推荐高并发统计使用LongAdder,实时值获取
原创
博文更新于 18 小时前 ·
423 阅读 ·
3 点赞 ·
0 评论 ·
6 收藏

原子类(AtomicInteger/AtomicReference/AtomicStampedReference)详解

Java原子类提供了无锁线程安全操作,主要包括AtomicInteger、AtomicReference等,基于CAS机制实现。AtomicInteger用于基本类型原子操作,AtomicReference支持泛型对象引用更新,但存在ABA问题。AtomicStampedReference通过版本号机制解决ABA问题,适用于需要严格状态一致性的场景。这些原子类广泛应用于计数器、无锁数据结构和并发配置更新等场景。
原创
博文更新于 21 小时前 ·
571 阅读 ·
5 点赞 ·
0 评论 ·
11 收藏

CAS 实现原理详解

CAS(比较并交换)是一种乐观锁机制,通过比较当前值与预期值来实现原子操作。其核心操作包含内存地址、预期值和新值三个参数,依赖硬件指令(如x86的cmpxchg)保证原子性。Java中的AtomicInteger等类通过Unsafe类实现CAS,采用自旋重试机制。但CAS存在ABA问题,即变量被多次修改后恢复原值导致误判。解决方案包括版本号机制和Java的AtomicStampedReference,通过额外维护版本号或时间戳来确保操作安全性。这些机制在并发编程中至关重要,既能保证线程安全,又避免传统锁的性
原创
博文更新于 21 小时前 ·
361 阅读 ·
24 点赞 ·
0 评论 ·
6 收藏

volatile 使用场景详解

volatile关键字在多线程编程中主要用于状态标记和双重检查锁定单例模式。它能保证变量的可见性和有序性,但不保证原子性。状态标记场景中,volatile确保线程能及时感知共享变量的修改;在单例模式中,防止指令重排序导致返回未初始化的对象。使用时需注意:不适合复合操作,避免过度使用,并合理设计变量生命周期。正确使用volatile能有效提升多线程程序的可靠性和性能。
原创
博文更新于 21 小时前 ·
401 阅读 ·
10 点赞 ·
0 评论 ·
8 收藏

禁止指令重排序与 Happens-Before 原则

本文系统分析了指令重排序与Happens-Before原则,重点比较了volatile与synchronized的特性差异。指令重排序包括编译器、处理器和内存重排序三种类型,Happens-Before原则通过8条核心规则保证多线程的可见性和有序性。volatile和synchronized在原子性、可见性、有序性、锁机制、性能等方面存在显著差异:volatile适用于简单变量操作,保证可见性和有序性;synchronized适用于复杂临界区操作,保证原子性。面试需重点掌握Happens-Before原则、
原创
博文更新于 22 小时前 ·
603 阅读 ·
11 点赞 ·
0 评论 ·
9 收藏

线程安全的日期格式化:避免 SimpleDateFormat 并发问题

摘要:SimpleDateFormat存在线程安全问题,主要由于其内部可变状态在多线程环境下会被并发修改。解决方案包括:1)每次创建新实例(简单但性能差);2)使用ThreadLocal(线程隔离,性能好);3)Java 8+推荐使用线程安全的DateTimeFormatter(最佳方案);4)同步锁(不推荐)。最佳实践推荐在Java 8+中使用DateTimeFormatter,Java 5-7可使用ThreadLocal方案,同时需注意ThreadLocal的内存泄漏问题。
原创
博文更新于 前天 17:53 ·
1029 阅读 ·
16 点赞 ·
0 评论 ·
6 收藏

ThreadLocal使用场景:线程隔离的核心应用

ThreadLocal的核心应用是实现线程隔离,主要用于线程上下文传递和数据库连接管理。在上下文传递中,它避免了繁琐的参数传递,简化了用户信息、链路ID等共享数据的访问;在数据库连接管理中,确保每个线程拥有独立连接,防止事务混乱。关键点包括:通过ThreadLocal存储线程私有变量,使用后必须清理避免内存泄漏,线程池场景需手动传递或使用InheritableThreadLocal。典型应用如Spring Security的认证上下文、分布式日志追踪等。
原创
博文更新于 前天 13:52 ·
472 阅读 ·
17 点赞 ·
0 评论 ·
12 收藏

split分割造成索引越界异常问题

问题:使用split拆分String字符串后拿到的数组发现一个问题-如果拆分的字符串根据拆分规则拆分后,后面的位置上如果没有值,则split返回的数组会自动忽略它们。demo:代码第四行返回的数组长度是4,如果是批量处理String操作,使用array[4]时就会报错下标越界问题String temp = “1,2,3,4,5”;System.out.println(temp.split(",").length); //5temp = “1,2,3,4,”;System.out.println(t
原创
博文更新于 2025.12.17 ·
1172 阅读 ·
0 点赞 ·
0 评论 ·
4 收藏

ThreadLocal内存泄漏解决方案

摘要:ThreadLocal内存泄漏的核心原因是ThreadLocalMap的Entry中弱引用的key被回收后,强引用的value未被清理。最佳解决方案是使用后调用remove(),通过try-finally确保执行,断开value强引用链。线程池场景尤其需注意,因核心线程长期存活,必须调用remove()。其他辅助方案包括避免存储大对象、合理设计生命周期等。误区澄清:static ThreadLocal本身不会泄漏,弱引用设计合理,不能依赖自动清理机制。黄金法则是必须主动remove(),尤其在try-
原创
博文更新于 2025.12.17 ·
461 阅读 ·
12 点赞 ·
0 评论 ·
23 收藏

线程池拒绝策略:饱和时的任务处理方案

内置策略无法满足所有需求时,可通过实现线程池拒绝策略是系统稳定性的最后一道防线,选择合适的策略需结合业务特性、任务重要性、系统负载等多维度考虑。内置的4种策略各有优缺点,实际应用中可根据需求灵活选择,必要时通过自定义策略满足特殊需求。面试金句“拒绝策略的选择核心是平衡任务执行与系统稳定性,需结合业务特性综合考虑。“核心任务选择AbortPolicy,快速失败;非核心任务选择CallerRunsPolicy或DiscardPolicy,缓解压力。
原创
博文更新于 2025.12.17 ·
604 阅读 ·
8 点赞 ·
0 评论 ·
21 收藏

线程池状态:从运行到终止的完整生命周期

线程池的生命周期包含5种状态:RUNNING(运行)、SHUTDOWN(关闭)、STOP(停止)、TIDYING(整理)和TERMINATED(终止)。状态由ctl变量控制,高3位表示状态,低29位表示工作线程数。RUNNING可接受新任务,SHUTDOWN停止接受新任务但会处理队列任务,STOP会中断所有任务,TIDYING是过渡状态,TERMINATED表示完全终止。状态转换是单向的,通过shutdown()或shutdownNow()触发,最终执行terminated()钩子方法完成终止。核心变量ct
原创
博文更新于 2025.12.17 ·
697 阅读 ·
12 点赞 ·
0 评论 ·
17 收藏

线程池监控与调优:从指标到核心线程数确定

线程池监控与调优是高并发系统稳定的关键。监控核心指标包括线程池状态(poolSize、activeCount等)、任务队列情况(queue.size)和任务统计(拒绝率、执行耗时)。常用工具有JConsole、Spring Boot Actuator和Prometheus+Grafana。调优策略需根据任务类型确定参数:CPU密集型场景核心线程数取CPU核心数±1,IO密集型取核心数×2或通过阻塞系数精确计算。最佳实践包括使用有界队列、合理设置拒绝策略和监控拒绝率。实际调优需通过压测验证,持续监控优化,确保
原创
博文更新于 2025.12.17 ·
670 阅读 ·
12 点赞 ·
0 评论 ·
27 收藏

常见线程池详解:适用场景与CachedThreadPool的高并发风险

摘要:Java线程池的选择需根据业务场景权衡。FixedThreadPool适合稳定负载但存在OOM风险;CachedThreadPool弹性伸缩但高并发下会无限创建线程,导致内存/CPU耗尽;ScheduledThreadPool支持定时任务;SingleThreadExecutor保证顺序执行。高并发场景推荐自定义ThreadPoolExecutor,控制线程数和队列容量,避免使用Executors默认实现的风险。(149字)
原创
博文更新于 2025.12.17 ·
756 阅读 ·
30 点赞 ·
0 评论 ·
9 收藏

ThreadLocal实现原理:从使用到内存泄漏深度解析

ThreadLocal实现原理与内存泄漏解析 ThreadLocal是Java实现线程本地存储的核心工具,通过每个线程独有的ThreadLocalMap存储变量副本,实现线程隔离。其关键设计在于: 弱引用Entry:ThreadLocalMap.Entry使用WeakReference包装ThreadLocal作为key,避免key内存泄漏 内存泄漏风险:当ThreadLocal实例被回收后,Entry的key变为null,但value仍被强引用,若线程长期存活(如线程池)会导致value无法回收 解决方案
原创
博文更新于 2025.12.17 ·
599 阅读 ·
11 点赞 ·
0 评论 ·
11 收藏

ReadWriteLock:读写锁

ReadWriteLock是Java并发编程中的读写分离锁机制,通过维护一对锁(共享读锁和排他写锁)实现高效并发访问。其核心设计遵循"读共享、写排他"原则,在读取操作频繁而写入操作稀少的场景下显著提升性能(如缓存系统、配置管理)。ReentrantReadWriteLock作为主要实现,支持可重入性、锁降级和公平/非公平模式,但需注意避免写锁饥饿和读锁升级问题。该锁特别适用于读多写少的高并发场景,相比传统排他锁可大幅提高系统吞吐量。
原创
博文更新于 2025.12.17 ·
542 阅读 ·
12 点赞 ·
0 评论 ·
24 收藏

ThreadPoolExecutor核心参数与执行流程详解

ThreadPoolExecutor的执行流程可概括为四步核心线程未满 → 创建核心线程执行核心线程已满 + 队列未满 → 加入队列核心线程已满 + 队列已满 + 未达最大线程 → 创建非核心线程执行核心线程已满 + 队列已满 + 已达最大线程 → 执行拒绝策略ThreadPoolExecutor的执行流程严格遵循核心参数的约束,其设计体现了"核心线程长期存活、非核心线程动态调整、任务队列缓冲、饱和拒绝保护"的思想。明确核心线程、非核心线程、任务队列、拒绝策略的协同关系。
原创
博文更新于 2025.12.17 ·
849 阅读 ·
33 点赞 ·
0 评论 ·
21 收藏

ReentrantLock核心解析

ReentrantLock是Java并发包()提供的可重入锁,相比,它提供了更灵活的锁控制机制,如公平锁/非公平锁、条件变量(Condition)、可中断锁、超时锁等。可重入是指同一个线程可以多次获取同一把锁,不会导致死锁。例如:重入计数:ReentrantLock内部维护一个计数器,线程每获取一次锁,计数器+1;释放一次,计数器-1;计数器为0时,锁真正释放。二、公平锁 vs 非公平锁:锁的获取策略1. 核心区别类型策略优点缺点适用场景公平锁按请求顺序获取锁(先到先
原创
博文更新于 2025.12.17 ·
855 阅读 ·
26 点赞 ·
0 评论 ·
29 收藏
加载更多