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