Home
工程师部落
Cancel

并发编程:单核计算机如何通过交替执行实现并发

任务A 与任务B 在单核 CPU 上交替运行 时间线 → ┌────────────────────────────────────────────────────────────┐ │ 单核CPU执行流程(通过时间片调度) │ ├────────────┬────────────┬────────────┬────────────┬─...

并发编程:可重入锁、不可重入锁、公平锁、非公平锁

并发编程:可重入锁、不可重入锁、公平锁、非公平锁 一、可重入锁(Reentrant Lock) 概念 同一个线程在外层方法获取锁之后,在进入该锁保护的内层方法时,可以再次获得锁,不会被自己阻塞。 特点: 锁维护一个持有线程的引用和重入计数器 每 lock() 一次,计数 +1,unlock() 一次,计数 -1 Java 示例 public class Reen...

并发编程:为什么并发编程容易出问题

在 Java 并发编程 中,容易出问题的根本原因主要来源于 Java 的内存模型(JMM)、线程调度机制、锁机制 Java 并发编程容易出问题的根本原因 1. Java 内存模型(JMM)导致的“可见性问题” 原因: Java 中每个线程有自己的工作内存(缓存),和主内存之间同步是延迟的。 一个线程修改变量后,另一个线程可能看不到最新值。 解决方式: 使...

并发编程:Java 线程生命周期

Java 线程生命周期 各状态解释与转换触发条件 状态 含义 转换触发条件 NEW(新建) 创建了线程对象,但未调用 start() 调用 start() 进入 Runnable RUNNABLE(可运行) 已启动线...

并发编程:Java 如何解决 可见性,有序性和原子性

在 Java 并发编程中,可见性、有序性、原子性是并发错误的三大核心根源。 其中 JMM (Java内存模型)用来解决 可见性 和 有序性 一、如何解决 可见性问题? 问题回顾: 一个线程修改了共享变量,其他线程看不到(缓存没有刷新)。 🔧 Java 解决方式: 机制 说明 volat...

并发编程:JDK7 和 JDK8 的 ConcurrentHashMap 锁实现方案

一、背景与目标 ConcurrentHashMap 是 Java 并发包中的高性能线程安全 Map,在 JDK7 与 JDK8 里,其底层实现机制发生了 重大变革。 主要目标: 支持高并发读写; 保证线程安全; 尽量减少锁竞争,提升吞吐性能。 二、JDK7:分段锁(Segment)机制 1. 结构概览 ConcurrentHashMap └── Segm...

并发编程:COW(Copy-On-Write,写时复制)

COW(Copy-On-Write,写时复制) 是一种常用的无锁设计思想,适用于读多写少的场景。 一、COW(写时复制)概念 原理: 多个线程读取共享数据时,使用同一份数据副本,不会发生冲突; 当某个线程需要修改数据时,它复制一份数据副本进行修改,修改完成后再将修改后的副本替换为共享数据; 读线程看到的始终是旧的、稳定的数据副本; 写操作的替换过程通常使用 CAS...

JDK8-list.parallelStream() 的坑

list.parallelStream() 默认使用 全局公共 ForkJoinPool(ForkJoinPool.commonPool())。 因为是全局的, 会导致如果线程池用完,其他 parallelStream 就会卡死。问题非常不好找 它使用哪个线程池? 当你调用 parallelStream() 时,JDK 会把任务提交到: ForkJoinPool.commonPo...

分布式场景下的资损防控

摘要: 原创出处 https://ifeve.com/ 欢迎关注和转载,保留摘要,谢谢! 资损的定义 资损是在指在业务活动中,业务规则和实际资金流动不一致,导致业务参与方中的任何一方或多方遭受了资金损失。简单理解就是系统的某个功能出现了BUG,导致用户或者公司出现了资金的损失,比如在营销过程中多给某个用户发了10元红包,或者是用户领取了10元红包无法使用,用户在支付时看到的订单金额是...

软件架构设计

软件架构设计一句话总结 软件架构设计是一门在复杂系统中平衡功能、性能与演进性的结构化决策艺术。 架构组成 一、架构结构(Structure) 描述系统由哪些部分组成以及如何协作: 模块划分(Modules / Components):功能单元,如服务、子系统、类、包等。 层次结构(Layers):如表示层、业务层、数据层。 交互关系(Connectors / Int...