并发编程
文章平均质量分 59
暖羲
这个作者很懒,什么都没留下…
展开
-
ThreadLocal
原理 每个线程私有一个ThreadLocalMap数据结构,每次调用get前,先拿出本线程的ThreadLocalMap,然后Threadlocal是key,取出value ThreadLocalMap的key为弱引用,value每次调用get或set前会清空key为null的value原创 2021-09-05 16:42:09 · 75 阅读 · 0 评论 -
AQS详解
整体框架 实现了Lock和Serializable接口 内部Sync类继承自AQS,并重写了tryAcquire和treRelease方法 AQS中的volatile变量state用于记录锁的持有状态和重入次数,1代表有有一个线程持有此锁,n代表当前线程冲入了n次 维护一个双端队列存储竞争锁的线程,队列的头节点是虚节点 AQS中的Node节点,waitStatus 1:该节点的线程可能由于超时或被中断而处于被取消(作废)状态 0:节点被创建的初始值 -1:有后续节点需要被唤醒 加锁流程 ...原创 2021-02-03 12:07:33 · 380 阅读 · 0 评论 -
线程
六种状态 状态名称 说明 NEW 初始状态,被创建,但未调用start RUNABLE 就绪状态 RUNING 运行状态 BLOCKED 阻塞状态,表示线程阻塞于锁 WAITING 等待状态,需要等待其他线程做出特定的动作(通知或中断) TIME_WAITING 超时等待状态,可以在指定时间内自动返回 TERMINATED 终止状态 线程创建 实现Runnable接口Thread thread = new Thread(new Runnable(){原创 2020-11-29 09:46:37 · 88 阅读 · 0 评论 -
JMM、CAS与volatile
JMM CAS(比较并交换) 过程 存在的问题 volatile关键字 happens-before规则 volatile作用 保证内存的可见性 禁止与普通变量重排序 volatile内存语义的实现 JMM CAS(比较并交换) 过程 V:要更新的变量(var) E:预期值(expected) //V变量该有的值 N:新值(new) 比较并交换的过程如下: 判断V是否等于E,如果等于,将V的值设置为N;如果不等,说明已经有其它线程更新了V,则当前线程放弃更新,什么都不做 存在..原创 2020-11-29 09:46:10 · 177 阅读 · 1 评论 -
Java线程池详解
线程池优势 Executor顶层接口 ThreadPoolExecutor实现类 五个必须参数 int corePoolSize:该线程池中核心线程数最大值 int maximumPoolSize:该线程池中线程总数最大值 。 long keepAliveTime:非核心线程闲置超时时长。 TimeUnit unit:keepAliveTime的单位。 BlockingQueue workQueue:阻塞队列,维护着等待执行的Runnable任务对象。后面详细介绍 两个非必须参数 Rejec..原创 2020-11-29 09:45:28 · 151 阅读 · 0 评论 -
Java锁机制
1. 乐观锁/悲观锁 1.1. 乐观锁 1.2. 悲观锁 2. 独享锁/共享锁 3. 互斥锁/读写锁 ReadWriteLock接口 ReentrantReadWriteLock是ReadWriteLock接口的实现 4. 可重入锁–一个线程可以多次请求自己持有对象锁的临界资源 4.1. ReentrantLock() 4.2. synchronized 5. 公平锁/非公平锁 6. 分段锁,synchronized关键字内部锁升级机制 6.1. 对象头及Mark Word 6.1..原创 2020-11-29 09:29:26 · 109 阅读 · 0 评论