
并发编程
文章平均质量分 73
Nullrable
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Thread-Per-Message 模式、Worker Thread 模式、生产者-消费者模式
模式分工机制优点缺点适用场景每请求一个线程简洁、无共享高并发下资源耗尽简单 socket 服务固定线程 + 任务分配线程重用、高效调度逻辑稍复杂Web 服务/任务队列队列缓冲 + 解耦异步解耦、限流控制复杂度高日志处理、流水线任务。原创 2025-07-22 22:04:06 · 387 阅读 · 0 评论 -
并发编程:COW(Copy-On-Write,写时复制)
/ 原子替换。原创 2025-07-22 16:18:02 · 340 阅读 · 0 评论 -
并发编程:JDK7 和 JDK8 的 ConcurrentHashMap 锁实现方案
项目核心结构Node[] + 链表/红黑树加锁方式锁住 Segment(ReentrantLock)锁桶头(synchronized)+ CAS并发读无锁,volatile + final 保证无锁,volatile 保证并发写锁一个 Segment(最多16个并发)精确到桶 + CAS,自旋扩容扩容全表加锁迁移多线程协作迁移(transferIndex)红黑树优化❌ 无✅ 桶内链表长度超过 8 转红黑树内存占用多 Segment 和锁,略高。原创 2025-07-22 15:59:07 · 417 阅读 · 0 评论 -
并发编程:无锁方案 CAS
类别Java 无锁类是否底层使用 CAS计数器LongAdder✅队列✅栈自定义/无锁链栈✅引用管理✅。原创 2025-07-22 15:43:41 · 371 阅读 · 0 评论 -
Semaphore 共享锁的唤醒策略设计
关键点说明唤醒一个节点避免惊群效应,保持传播的渐进式唤醒被唤醒节点负责唤醒下一个通过中的传播机制(propagate)共享模式可以多个线程并发执行但唤醒是串行传播的,获取许可成功的线程才会继续传播唤醒后续。原创 2025-07-22 15:11:07 · 280 阅读 · 0 评论 -
AQS(AbstractQueuedSynchronizer)
state控制资源状态(独占锁、共享锁的核心)CLH 队列保障线程公平有序等待锁队列是双向链表结构,便于通知前后节点CAS + volatile + LockSupport 保证了线程安全和性能等待队列与同步队列之间的跳转机制tryAcquiretryRelease如何在子类中自定义共享模式下的队列传播(PROPAGATE欢迎继续提问。原创 2025-07-22 14:24:56 · 546 阅读 · 0 评论 -
发编程:可重入锁、不可重入锁、公平锁、非公平锁
wait();notify();分类可重入锁不可重入锁定义同一线程可以重复获取已持有的锁同一线程重复获取锁会阻塞自己例子自定义锁或极简实现是否阻塞自身否是死锁风险小大分类公平锁非公平锁加锁顺序先进先出插队,谁抢到谁执行实现方式性能较低,避免饥饿较高,但可能造成饥饿使用场景任务调度敏感、公平性重要性能优先,锁竞争激烈。原创 2025-07-21 22:16:40 · 422 阅读 · 0 评论 -
并发编程中死锁、活锁、饥饿
问题是否阻塞是否有进展CPU 占用根本原因解决方式死锁是无低互相等待资源加锁顺序、一致性、tryLock活锁否无高反复让步或重试加延迟、限制重试、协调机制饥饿否无低~正常资源分配不均公平锁、任务公平调度。原创 2025-07-21 22:13:14 · 389 阅读 · 0 评论 -
并发编程:ReentrantLock + Condition
是一种可重入互斥锁。与更高的灵活性(可以手动加锁/释放锁)更丰富的功能(如支持公平锁、可中断锁、尝试加锁等)try {// 临界区Condition是用来代替Object的wait()notify()的。它允许多个线程在一个Lockawait():当前线程等待(释放锁并挂起)signal():唤醒一个等待的线程:唤醒所有等待线程Condition必须通过Lock是比传统更加强大和灵活的线程协作机制,适用于更复杂的并发控制场景。存在多个等待队列(条件变量)原创 2025-07-21 16:12:52 · 355 阅读 · 0 评论 -
并发编程:Java 线程生命周期
触发事件状态变迁start()被调用获得 CPU 执行时间片执行wait()执行sleep()join(ms)等待锁资源被notify()唤醒超时等待结束获取到锁run()方法执行完毕任意状态 →TERMINATED。原创 2025-07-21 14:36:35 · 125 阅读 · 0 评论 -
并发编程:Java 如何解决 可见性,有序性和原子性
并发问题典型现象Java 解决机制可见性线程 A 修改变量,线程 B 看不到volatilefinal有序性指令被重排序,行为反直觉volatile、JMM 顺序规则原子性多线程修改共享变量,结果错误LockAtomicXXX、并发容器。原创 2025-07-21 14:03:00 · 355 阅读 · 0 评论 -
为什么并发编程容易出问题
Java 并发问题的本质,是在“多个线程共享变量”+“非原子操作”+“不可见内存”+“不确定调度” 的多重组合下,引发状态错乱和 bug。原创 2025-07-21 11:17:39 · 672 阅读 · 0 评论 -
并发编程:单核计算机如何通过交替执行实现并发
问题答案单核如何并发?操作系统在不同任务之间快速切换,靠“时间片+上下文切换”模拟并发CPU 是谁在控制任务切换?操作系统内核调度器IO操作时CPU是否空闲?操作系统会将任务阻塞并切换到其他任务,避免CPU浪费是真正并行吗?❌ 不是。CPU 同一时间只能执行一个任务,但交替运行让人“看起来”同时执行多个任务。原创 2025-07-20 22:52:55 · 217 阅读 · 0 评论 -
并发编程:起源
并发编程是为了解决多个任务共享资源、合理调度、提高响应与吞吐的一种程序设计方法,贯穿于操作系统、网络编程、大数据计算等各个领域。原创 2025-07-20 22:52:02 · 757 阅读 · 0 评论