![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
J.U.C
文章平均质量分 83
介绍了并发基础知识和J.U.C包下的常用并发框架
正经人z.
这个作者很懒,什么都没留下…
展开
-
CyclicBarrier的理解与应用
一、概述CyclicBarrier类是JUC框架中的工具类,也是一个同步辅助装置:允许多个线程去等待直到全部线程抵达了公共的栅栏点。它的一个很明显的特点就是Cyclic 循环,也就是说栅栏是可以循环使用的,激活循环使用的条件是当所有线程通过了栅栏并释放。二、源码分析//静态内部类,用于表示屏障的状态private static class Generation { boolean broken = false; }//重入锁,用于并发场景下的加锁和释放锁 priv原创 2022-03-09 15:09:11 · 3488 阅读 · 0 评论 -
CountDownLatch的源码学习
一、简介1、CountDownLatch类是一个同步辅助装置,允许一个或多个线程去等待直到另外的线程完成了一组操作。2、它通过count进行初始化,await方法会阻塞直到当前的count为0由于调用了countDown方法,之后所有的线程将被释放并且立即返回结果。count不能被重置,如果你想count可以重置,请使用CyclicBarrier。3、CountDownLatch是一个通用的同步工具,可用于多种用途。CountDownLatch初始化使用count作为一个简单的可开可关的大门:所有的线原创 2021-11-09 21:15:10 · 141 阅读 · 0 评论 -
FutureTask的源码学习
一、简介1、FutureTask是一个可取消的异步计算。这个类是Future的实现类,有开始和取消一个计算的方法,如果一个计算已经完成可以查看结果。如果在计算没有完成的情况下调用get获取计算结果会阻塞。且一旦任务完成后,计算不能重新开始或被取消,除非计算被runAndReset调用执行。2、FutureTask被用来去封装一个Callable或者Runnable,一个FutureTask能够被submit作为一个Executor3、FutureTask 的线程安全由CAS来保证。二、源码分析1原创 2021-11-07 20:50:20 · 280 阅读 · 0 评论 -
阻塞队列的源码学习
一、BlockingQueue1、BlockingQueue不接受null元素,如果写入null,会抛出NullPointException2、它被设计用来做生产-消费队列3、由于它间接继承了Collection接口,所以,可以通过remove(x)来移除队列中任意一个元素,但是,除了处理对头和队尾的元素,操作其他地方的元素会影响性能,所以,偶尔使用remove方法是可以的,不建议频繁使用。4、BlockingQueue是线程安全的5、有些实现类的容量是受限的,所以,插入元素要注意。示例典原创 2021-11-07 17:35:47 · 182 阅读 · 0 评论 -
ThreadLocal讲解
1、简介源码中这么说的:此类提供线程局部变量,这些局部变量不同于其他普通的变量,每个线程通过get或set方法访问的是它独有的变量,可以独立的初始的赋值变量副本。ThreadLocal的实例通常是private static修饰的用来联系每个线程的状态,例如:用户id或者事务id个人总结:ThreadLocal是一个将在多线程中为每一个线程创建单独的变量副本的类; 当使用ThreadLocal来维护变量时,ThreadLocal`会为每个线程创建单独的变量副本, 避免因多线程操作共享变量而导致的数据不一原创 2021-09-28 11:06:21 · 109 阅读 · 0 评论 -
semaphore讲解
一、简介1、Semaphore底层是基于AbstractQueuedSynchronizer来实现的。Semaphore称为计数信号量,它允许n个任务同时访问某个资源,可以将信号量看做是在向外分发使用资源的许可证,只有成功获取许可证,才能使用资源。2、它也是通过内部类Sync继承了AQS,它的方法几乎都是用的AQS的,少部分重写了AQS的方法,同时,它的信号量机制是通过AQS的state属性来操作的,变更state属性使用到了CAS操作保证变量的数据一致性。3、它的方法几乎是通过Sync类,也就是AQ原创 2021-09-26 10:25:08 · 6123 阅读 · 0 评论 -
ThreadPoolExecutor线程池管理
1、简介是线程池中一个重要的类,与Executor相联系,可以说取代了Executor。用来创建线程池处理高并发。2、原理其实java线程池的实现原理很简单,说白了就是一个线程集合workerSet和一个阻塞队列workQueue。当用户向线程池提交一个任务(也就是线程)时,线程池会先将任务放入workQueue中。workerSet中的线程会不断的从workQueue中获取线程然后执行。当workQueue中没有任务的时候,worker就会阻塞,直到队列中有任务了就取出来继续执行。当一个任务提交至原创 2021-09-25 11:43:39 · 621 阅读 · 0 评论 -
ReentrantLock基础讲解
思考题什么是可重入,什么是可重入锁? 它用来解决什么问题?ReentrantLock的核心是AQS,那么它怎么来实现的,继承吗? 说说其类内部结构关系。ReentrantLock是如何实现公平锁的?ReentrantLock是如何实现非公平锁的?ReentrantLock默认实现的是公平还是非公平锁?使用ReentrantLock实现公平和非公平锁的示例?ReentrantLock和Synchronized的对比?为啥ReentrantLock默认要是非公平的锁呢?什么时候用Reentr原创 2021-09-19 17:42:49 · 440 阅读 · 0 评论 -
AbstractQueuedSynchronizer基础讲解
思考题sync队列和condition队列的作用分别是什么?怎么协调的?sync队列中的节点的状态有哪些?都是自旋还是有阻塞的?是怎么争抢锁的?sync队列是怎么保证FIFO的?signal方法和release方法的区别?一、简介1、提供了一个基于FIFO队列,它是CLH队列的变种,CLH队列通常用于自旋锁 ,可以用于构建锁或者其他相关同步装置的基础框架。该同步器(以下简称同步器)利用了一个int来表示状态,期望它能够成为实现大部分同步需求的基础。使用的方法是继承,子类通过继承同步器并需要实现原创 2021-09-18 22:25:20 · 277 阅读 · 0 评论