![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JUC
ั็~_~毋宁
小白java攻城狮!
展开
-
JUC并发包下的AQS锁源码解析(一)
JUC并发包下的AQS锁源码解析AQS的定义谈到并发就不得不说AQS(AbstractQueuedSynchronizer)所谓的AQS翻译过来就是抽象队列同步器,是用来构建锁或者其他同步组件的基础框架,它使用了一个int成员变量来表示同步状态,通过CLH对列来完成资源获取线程的排队工作。说白了就是 采用了volatile+CAS来保证加锁解锁,用队列来完成线程的排队,用park/unpark来实现线程的等待与唤醒同步器的实现同步器主要是通过继承的方式来实现,AQS采用模板方式,让子类来继承同步器并原创 2020-07-25 16:17:01 · 112 阅读 · 1 评论 -
线程之间的通信二(面试题)
线程之间的通信二要求用线程顺序打印AaBbCc…Zz这道题一开始想到的就是sync加wait跟notify解法。这也是最经典的解法,同时也是这道题最想要的答案,但是但我们学了神奇的JUC并发包之后,解法就变得多种多样了,以下是我目前能想到的解法,分享给大家!解法一:sync加wait跟notifypublic class T01_00_sync_wait_notify { //定义两个数组,一个小写字母,一个大写字母 static char[] lowers=new char[26];原创 2020-07-22 09:53:46 · 148 阅读 · 1 评论 -
线程之间的通信(面试题)
实现一个容器,提供两个方法,add,size写两个线程,线程1添加10个元素到容器中, 线程2实现监控元素的个数,当个数到5个时,线程2给出提示并结束这是一道线程的面试题,看起来挺简单的,做起来实际上有不少小坑,是一道很有意思的面试题,目前我能想到的是大概七种解法,下面把我的解法分享给大家。你们有不一样的解法欢迎到评论区留言解法一:传统的wait and notify实现public class WithoutVolatile {//创建一个线程安全的ArrayList集合,其实在这个解法中不用原创 2020-07-09 14:00:12 · 1543 阅读 · 5 评论 -
AtomicInteger类多次调用不能保证原子性
AtomicInteger类多次调用不能保证原子性AtomicInteger是JUC下并发包的一个原子操作类,那就不得不提到原子性这个概念了原子性指的就是这个区间内是不可分割的,保证了这个区间内的执行语句是一个整体。(个人理解)原⼦(atomic)本意是“不能被进⼀步分割的最⼩粒⼦”,⽽原⼦操作(atomic operation)意为“不可被中断的⼀个或⼀系列操作”。<摘自《java并发编程的艺术》>AtomicInteger的原子性在AtomicInteger中怎么保证了原子性的原创 2020-07-07 10:41:59 · 837 阅读 · 0 评论