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 · 310 阅读 · 0 评论 -
Java JUC 2 -AQS
AQS 理解AQS AbstractQueuedSynchronizer,它提供了一种实现阻塞锁和一系列依赖FIFO等待队列的同步器的框架,ReentrantLock、Semaphore、CountDownLatch、CyclicBarrier等并发类均是基于AQS来实现的,具体用法是通过继承AQS实现其模板方法,然后将子类作为同步组件的内部类。 AQS基本框架如下图所示: AQS维护了一个volatile的共享变量state和一个FIFO线程等待队列。当state>0时表示已经获取了锁,当原创 2020-08-31 21:56:23 · 376 阅读 · 0 评论 -
Java JUC 1 基础知识
java线程状态转换关系 juc并发包 线程:是操作系统能够进行运算调度的最小单位 CPU多级缓存 由于cpu的计算速度与内存的i/o操作速度存在几个数量级的差距,为了弥补改差距,使用了多级高速缓存解决该问题,但同时又引出了新的问题 CPU多级缓存-缓存一致性问题,而缓存一致性的解决是通过各种协议完成如MSI MESI MOSI等 CPU多级缓存-乱序执行优化:在多线程中,如果两个线程有通信,该优化可能带来一些问题,比如线程a有一个标志位,在线程执行后改变;线程b会监听这个标志,然后做一些处理,由于乱原创 2020-11-17 11:37:35 · 428 阅读 · 2 评论