并发编程
文章平均质量分 93
java并发编程相关文章
山河小帅
路漫漫其修远兮,吾将上下而求索。热爱编程的一枚技术痴迷者,喜欢不断学习充实自身,做技术分享,期望与大家共勉。
展开
-
并发编程并发安全性之Lock锁及原理分析
lock锁主要分为两部分锁的抢占和锁的释放抢占锁:是在释放锁和抢占锁的临界区 区分公平锁和非公平锁,非公平锁是在当前线程释放锁的瞬间刚来进来一个新的线程,则无需排队可以直接抢占锁,如果没有抢占到,则加入到AQS队列中进行阻塞等待。而公平锁的体现是加入到AQS队列中的阻塞线程,当释放锁后,只能按照先后顺序去抢占锁。释放锁:释放锁的过程就是把独占锁的线程设为null,状态state恢复为无锁状态,并且去AQS队列中唤醒第一个处于等待的线程节点。原创 2024-03-05 22:50:09 · 1037 阅读 · 0 评论 -
并发编程线程安全性之可见性有序性
可见性导致的原因 1.CPU的高速缓存 2.指令重排序MESI协议保证缓存的一致性指令重排序在不同的架构中有着不同的内存屏障指令来解决。原创 2024-02-26 21:27:05 · 847 阅读 · 0 评论 -
并发编程线程安全之同步锁Synchronized
原子性的本质是互斥访问,同一时刻只有一个线程对它进行访问操作。原创 2024-02-19 21:39:18 · 888 阅读 · 0 评论 -
并发编程之线程
线程是一个轻量级的进程,是进程中的一个执行单元,是CPU的最小调度单元,一个进程中可以有N个线程。原创 2024-01-31 00:28:40 · 993 阅读 · 0 评论 -
并发编程之线程池的设计和原理
线程池中的核心线程是延迟初始化的先初始化核心线程调用阻塞队列的方法,把task存进去如果true,说明当前的请求量不大,核心线程就可以搞定false,增加工作线程(非核心线程)如果添加失败,说明当前的工作线程数量达到了最大的线程数,直接调用拒绝策略// 前3位记录运行状态 后29位记录线程数// 1.判断当前工作线程数是否小于核心线程数(延迟初始化)if (addWorker(command, true)) // 添加工作线程,并执行任务return;// 2.添加到阻塞队列中。原创 2024-05-02 22:09:36 · 859 阅读 · 2 评论 -
并发编程之线程通信及Condition的原理分析
1.线程的通信是基于在同一个锁下,且线程之间存在竞争,并且还需要有一个共享的资源,彼此之间基于共享资源来进行交互的一种通信方式。2.wait/notify是基于synchronized同步锁实现的3.Condition是J.U.C中的实现,基于Lock锁。原创 2024-04-23 00:01:22 · 688 阅读 · 1 评论 -
并发编程之ThreadLocal使用及原理
1.ThreadLocal主要是为了线程安全,避免多线程的资源共享,线程间的资源互相隔离2..ThreadLocal的注意点: ThreadLocal可能会造成内存泄漏,因此在每次使用完后,调用remove进行清理3.为什么ThreadLocal的key值是弱应用,而value值是强引用?在ThreadLocalMap初始化时已经说明了key值为什么要采用弱引用,那么value值为什么不能设置为弱引用呢。原创 2024-04-14 23:00:50 · 931 阅读 · 0 评论 -
并发编程之ConcurrentHashMap源码分析
1. 存在线程竞争的table初始化、赋值以及扩容、数据转移处采用细粒度的CAS操作提升并发效率,整体主要是CAS机制和同步代码块结合使用2. 多线程并发协助扩容和数据转移,在数据转移处,采用多线程并发协助转移各个不同的分段区间,来提升table扩容时数据迁移的效率3.数据迁移时的链表采用高低位快速迁移的方法提升效率。原创 2024-04-20 22:33:10 · 566 阅读 · 0 评论