![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java并发编程
王伟王胖胖
这个作者很懒,什么都没留下…
展开
-
CAS原子操作底层原理
CAS原子操作史上最底层原理抢红包的问题compareAndSetobjectFieldOffsetcompareAndSetInt抢红包的问题本篇我只想讲这一个方法,因为其他的CAS操作类似,只要把这个搞懂了,其他的就不是问题。举个最简单的例子,1000个线程要去修改一个值,但是这个值只能被修改一次,比如1000个人抢1个红包,但是红包就只有一个:public class NoAtomic...原创 2020-01-14 19:58:26 · 762 阅读 · 0 评论 -
ThreadPoolExecutor原理详细解读一
ThreadPoolExecutor原理详细解读一执行任务execute(Runnable command)添加线程addWorker(Runnable firstTask, boolean core)添加线程失败addWorkerFailed(Worker w)尝试终止tryTerminate具体的工作"线程" Worker启动线程runWorker(Worker w)线程退出后的处理proce...原创 2020-01-14 19:57:00 · 518 阅读 · 0 评论 -
ThreadPoolExecutor原理预备知识
ThreadPoolExecutor原理预备知识为什么要有线程池Executor又是什么ThreadPoolExecutor的基本信息基本服务流程状态一些问题核心线程或者队伍满了怎么办线程哪里来线程数量的限制为什么要有线程池首先先说下为什么要使用线程池,其实就是这个池子有什么好处,解决我们什么问题。大致就一下几点:池子里的线程可以复用,减少创建和销毁的开销。池子里的线程可以管理,不至于太...原创 2020-01-14 19:56:27 · 498 阅读 · 2 评论 -
ReentrantLock和AQS源码解读系列五
ReentrantLock和AQS源码解读系列五读写锁读写锁的结构ReentrantReadWriteLock构造方法WriteLockReadLockNonfairSyncFairSyncSyncHoldCounterThreadLocalHoldCounterwriteLock.lock()tryAcquire(int acquires)writeLock.unlock();tryReleas...原创 2020-01-10 20:54:24 · 297 阅读 · 0 评论 -
ReentrantLock和AQS源码解读系列四
ReentrantLock和AQS源码解读系列四共享锁CountDownLatchCountDownLatch构造方法awaittryAcquireShareddoAcquireSharedInterruptibly共享锁以CountDownLatch为例子来讲比较容易理解,我们先来看个例子,有5个线程一期阻塞,然后需要CountDownLatch来唤醒,而且会同时唤醒所有线程,5个线程在等同...原创 2020-01-10 20:53:51 · 351 阅读 · 0 评论 -
ReentrantLock和AQS源码解读系列三
ReentrantLock和AQS源码解读系列三locklockInterruptiblytryLocktryLock(long timeout, TimeUnit unit)lock这个方法是在获取锁的过程中不会响应中断,也不会退出,要么阻塞,要么继续获取锁,直到成功获取了才,如果期间有中断则会在最后进行一次中断。lockInterruptibly这个方法刚好和上面相反,只要有中断,阻塞...原创 2020-01-10 20:53:21 · 263 阅读 · 0 评论 -
ReentrantLock和AQS源码解读系列二
ReentrantLock和AQS源码解读系列二公平锁的细节hasQueuedPredecessors取消状态细节公平锁的细节hasQueuedPredecessors如果我们设置为公平锁,那么在尝试获取所之前会先判断队伍里有没有人在排队,对应的就是: public final boolean hasQueuedPredecessors() { Node h, s; ...原创 2020-01-10 20:48:41 · 424 阅读 · 0 评论 -
ReentrantLock和AQS源码解读系列一
ReentrantLock和AQS解读系列一ReentrantLockReentrantLock与AbstractQueuedSynchronizer的关系AbstractQueuedSynchronizer结构Node结构ReentrantLock 的简单看病的例子获取锁1.有许可资源,没人排队,我抢到了许可,我看病2.有许可资源,没人排队,但是我没抢到许可,我可能要进排队流程3.有许可资源,有...原创 2020-01-10 20:47:06 · 719 阅读 · 1 评论 -
ReentrantLock和AQS源码解读系列预备知识二
ReentrantLock和AQS源码解读系列预备知识二AQS所谓的队列的理解技师空着,刚好我可以大保健技师忙着,创建了队伍,小王排第二(公平锁)AQS所谓的队列的理解首先要说一下AQS的等待队列和我们常规意义上理解的队列还是有点差别的,因为他的队头的那个结点是获取锁的那个结点,第二个结点才是排队的。或者我们可以换个方式理解,最前面的那个并不是排队的,是正在接受服务的,后面才是队伍,只是为了管...原创 2020-01-10 20:51:06 · 286 阅读 · 0 评论 -
ReentrantLock和AQS源码解读系列预备知识一
ReentrantLock和AQS源码解读系列预备知识为什么需要预备知识锁的一些分类ReentrantLock中的锁悲观锁公平锁和非公平锁可重入锁阻塞锁自旋锁FairSync公平锁NonfairSync非公平锁ReentrantLock与AbstractQueuedSynchronizer的关系AbstractQueuedSynchronizer结构Node结构为什么需要预备知识首先这个话题是...原创 2020-01-10 20:50:13 · 620 阅读 · 0 评论