![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JUC
文章平均质量分 93
phn555
生活,就应当努力使之美好起来
展开
-
Java JUC 3 -AQS同步组件
AQS同步组件CountDownLatch维护一个计数器State,每调用countdown计数器减1,当调用await时,会将当前线程放到阻塞队列中并挂起,只有当state为0时,才会唤醒阻塞队列中的线程(也就是移到同步队列),该线程才会执行。当某个计算需要等待另一个应用的完成时使用,用法:public static void main(String[] args) throws InterruptedException { CountDownLatch latch = new CountD原创 2020-08-31 21:58:29 · 311 阅读 · 0 评论 -
Java JUC 2 -AQS
AQS理解AQSAbstractQueuedSynchronizer,它提供了一种实现阻塞锁和一系列依赖FIFO等待队列的同步器的框架,ReentrantLock、Semaphore、CountDownLatch、CyclicBarrier等并发类均是基于AQS来实现的,具体用法是通过继承AQS实现其模板方法,然后将子类作为同步组件的内部类。AQS基本框架如下图所示:AQS维护了一个volatile的共享变量state和一个FIFO线程等待队列。当state>0时表示已经获取了锁,当原创 2020-08-31 21:56:23 · 389 阅读 · 0 评论 -
Java JUC 1 基础知识
java线程状态转换关系juc并发包线程:是操作系统能够进行运算调度的最小单位CPU多级缓存由于cpu的计算速度与内存的i/o操作速度存在几个数量级的差距,为了弥补改差距,使用了多级高速缓存解决该问题,但同时又引出了新的问题CPU多级缓存-缓存一致性问题,而缓存一致性的解决是通过各种协议完成如MSI MESI MOSI等CPU多级缓存-乱序执行优化:在多线程中,如果两个线程有通信,该优化可能带来一些问题,比如线程a有一个标志位,在线程执行后改变;线程b会监听这个标志,然后做一些处理,由于乱原创 2020-11-17 11:37:35 · 431 阅读 · 2 评论