![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java.lang.concurrent
文章平均质量分 72
夜尽天明xyz
你的时间有限,所以不要被教条所限,不要活在别人的观念里。不要让别人的意见左右自己内心
展开
-
线程池底层原理
一、概述java线程池大体由一个线程集合workerSet和一个阻塞队列workQueue组成。当用户向线程池提交一个任务(也就是线程)时,线程池会先将任务放入workQueue中。workerSet中的线程会不断的从workQueue中获取线程然后执行。当workQueue中没有任务的时候,worker就会阻塞,直到队列中有任务了就取出来继续执行public ThreadPoolExecutor(int corePoolSize,//核心线程数原创 2021-06-04 17:10:24 · 1286 阅读 · 0 评论 -
利用AQS实现简单的公平互斥锁
之前我在文章 源码解读java 并发包 AQS中已经讲过了,实现锁的功能,必须继承AQS类,重写父类的 tryAcquire,tryRelease或者tryAcquireShared,tryReleaseShared 的方法,自定义的锁也非常简单,内部定义一个Sync类继承AQS就行,看代码import java.util.concurrent.locks.AbstractQueuedSynchronizer;public class Mux { // 自定义同步器 private stati原创 2021-05-28 15:15:55 · 138 阅读 · 0 评论 -
自定义实现CAS自旋锁
自定义实现CAS自旋锁本篇文章利用原子引用类自定义实现的自旋锁new 一个原子引用类,对象类型为ThreadAtomicReference<Thread> atomicReference = new AtomicReference<>();加锁方法,通过while不断自旋,设置当前线程public void MyCASLock(){ System.out.println(Thread.currentThread().getName()+"尝试获取锁!");原创 2021-01-30 20:39:35 · 366 阅读 · 2 评论 -
CyclicBarrier底层源码解析
一、概述前面我们讲解了ReentrantLock,CountDownLatch,Semaphore的源码,他们都是由AQS来实现的,而CyclicBarrier则是通过ReentrantLock+Condition实现的CyclicBarrier即为栏栅,比如短跑比赛,5人一组,必须5人到齐准备好了了,才开始跑,5人跑走以后,后面第二组同样等到齐准备好了,继续开始跑。...原创 2021-05-27 22:23:30 · 158 阅读 · 1 评论 -
结合AQS对Semaphore进行源码解读
一、概述源码解读java 并发包 AQS(阳哥讲解整理)通过ReentrantLock对AQS的独占模式非公平锁进行了讲解,本篇文章,我们将已Semaphore讲解下共享模式下的AQS实现Semaphore就是信号量,我们可以用一个桥梁上可通行的最大车数来表示,入某大桥一次只能承载2辆汽车同时通行,当桥梁上的车小于2时,其他车辆才可以进入二、Semaphore框架acquire() //开启通道,默认为1release() //释放通道,默认为1acquire(int arg) //开启通道,原创 2021-05-27 17:57:53 · 94 阅读 · 0 评论 -
结合AQS对CountDownLatch进行源码解读
一、概述 上一遍我通过ReentrantLock对AQS的独占模式非公平锁进行了讲解,本篇文章,我们将已CountDownLatch讲解下共享模式下的AQS实现 CountDownLatch能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。使用一个计数器进行实现。计数器初始值为线程的数量。当每一个线程完成自己任务后,计数器的值就会减一。当计数器的值为0时,表示所有的线程都已经完成一些任务,然后在CountDownLatch上等待的线程就可以恢复执行接下来的任务。二、CountDownLa原创 2021-05-27 16:51:23 · 135 阅读 · 1 评论 -
源码解读java 并发包 AQS(阳哥讲解整理)
一、概述AQS全称 AbstractQueuedSynchronizer 抽象队列同步器,java concurrent包里很多类中定义了Sync内部类继承自AQS,比如 ReentrantLock,CountDownLatch,Semaphore,CyclicBarrier(内部使用了ReentrantLock)等,下面我们来通过ReentrantLock源码解读AQS二、AQS内部框架1.定义两种资源共享方式:Exclusive(独占,只有一个线程能执行,如ReentrantLock)和Share原创 2021-05-27 15:32:49 · 270 阅读 · 0 评论 -
java并发包之Semaphoree
这里只介绍Semaphoree的使用和场景,源码后期再分解Semaphoree作为限流使用,限制线程并发访问数量。Semaphoree的四个重要方法:public void acquire() //开启通道,默认为1public void release() //释放通道,默认为1public void acquire(int arg) //开启通道,动态开启public ...原创 2019-11-26 16:26:27 · 95 阅读 · 0 评论 -
java并发包之CyclicBarrier
这里只介绍CyclicBarrier的使用和场景,源码后期再分解CyclicBarrier可以理解为一个珊栏,定义了这个珊栏后,必须要达到一定条件珊栏才可以打开,让所有线程跑起来。可重复使用。CyclicBarrier两个重要的方法:public int await() //调用的线程被挂起,知道满足珊栏的条件public int await(long timeout, TimeU...原创 2019-11-26 15:30:56 · 107 阅读 · 0 评论 -
java并发包之CountDownLatch
这里只介绍CountDownLatch的使用和场景,源码后期再分解CountDownLatch实际上是一个程序计数器,初始化一个数值,让一组线程去跑,其他线程处于等待中,跑的那组线程每跑完一个计数器减一,直到计数器为零,此时,等待的线程就可以跑了。计数器不可重复使用。CountDownLatch api 中三个方法 :public void await() //线程调用被挂起,计数器为...原创 2019-11-26 15:01:19 · 165 阅读 · 0 评论