JUC
0 人感兴趣 · 35 次引用
- 最新
- 推荐
AQS 的今生,构建出 JUC 的基础
《AQS的前世,从1990年的论文说起》中我们已经对AQS做了简单的介绍,并学习了先于AQS出现的3种基于排队思想的自旋锁。今天我们深入到AQS的设计中,探究Doug Lea是如何构建JUC框架基础组件的。不过在正式开始前,我们先来回顾上一篇中提到的面试题:
JUC 常用 4 大并发工具类
JUC就是java.util.concurrent包,这个包俗称JUC,里面都是解决并发问题的一些定义类,该包的位置位于java下面的rt.jar包下面。
【JUC】交换器 Exchanger 详解
JDK中提供了不少的同步工具,现在分享一个相对比较冷门的同步工具——交换器(Exchanger)。你知道Exchanger的作用是什么吗?实现机制是什么?可以用来做什么呢?
【JUC】循环屏障 CyclicBarrier 详解
jdk中提供了许多的并发工具类,大家可能比较熟悉的有CountDownLatch,主要用来阻塞一个线程运行,直到其他线程运行完毕。而jdk还有一个功能类似并发工具类CyclicBarrier,你知道它的作用吗?和CountDownLatch有什么区别呢?
Java- 技术专题 -CountDownLatch 的介绍和使用
CountDownLatch是在JDK1.5的时候才被引入,跟它一起被引入的工具类还有CyclicBarrier(回环栅栏)、Semaphore(信号量)、ConcurrentHashMap(并发Hash表)和BlockingQueue(阻塞队列),存在于java.util.concurrent包下(常说JUC)。接下来讲解一下这
ScheduledThreadPoolExecutor 源码解读(二)ScheduledFutureTask 时间调度执行任务(延迟执行、周期性执行)
延迟阻塞队列DelayedWorkQueue中放的元素是ScheduledFutureTask,提交的任务被包装成ScheduledFutureTask放进工作队列,Woker工作线程消费工作队列中的任务,即调用ScheduledFutureTask.run(),ScheduledFutureTask又调用任务的run(),这点和ThreadPoolExecu
ScheduledThreadPoolExecutor 源码解读(一)DelayedWorkQueue 高度定制延迟阻塞优先工作队列
ScheduledThreadPoolExecutor继承自ThreadPoolExecutor,所以其内部的数据结构和ThreadPoolExecutor基本一样,并在其基础上增加了按时间调度执行任务的功能,分为延迟执行任务和周期性执行任务。
ThreadPoolExecutor 源码解读(三)如何优雅的关闭线程池(shutdown、shutdownNow、awaitTermination)
学会了如何提交任务,还需要知道如何正确的关闭线程池。当关闭一个线程池时,有的工作线程还正在执行任务,有的调用者正在向线程池提交任务,并且工作队列中可能还有未执行的任务。因此,关闭过程不可能是瞬时的,而是一个平滑过渡的过程。
ThreadPoolExecutor 源码解读(二)execute 提交任务,Worker 详解。如何执行任务?如何回收空闲线程?
了解了线程池基本属性的概念是远远不够的,还需要知道每一个属性在源码中的体现,比如提交任务的过程中是如何将核心线程数、工作队列、最大线程数以及拒绝策略等连起来的?工作线程是如何执行任务代码的?线程池是如何回收空闲线程的?
ThreadPoolExecutor 源码解读(一)重新认识 ThreadPoolExecutor(核心参数、生命周期、位运算、ThreadFactory、拒接策略)
在Java中,创建一个线程new Thread,就像创建一个对象一样简单,但实际上创建线程远不是创建一个对象那么简单。创建对象,仅仅是在 JVM 的堆里分配一块内存而已;而创建一个线程,却需要调用操作系统内核的 API,并且要为线程分配一系列的资源,所以线程是一
FutureTask 源码解读,阻塞获取异步计算结果(阻塞、取消、装饰器、适配器、Callable)
FutureTask 继承自Runnable,所以也可以实现异步执行的效果,但是和常规的异步执行方式不同,常规异步只要求异步的过程是正确的就可以了,而FutureTask不仅可以知道异步执行的状态,还可以知道异步结果。那它是如何实现的呢?
CopyOnWriteArrayList 源码解读之 CopyOnWrite 思想的利与弊
CopyOnWriteArrayList作为并发容器集合,在窥探其原理之前,先想想,倘若让我们自己来开发一个并发集合,该如何设计?
关于 ReentrantReadWriteLock,首个获取读锁的线程单独记录问题讨论(firstReader 和 firstReaderHoldCount)
读了ReentrantReadWriteLock的源码,知道读写锁共用一个state,低16位表示写锁的状态和重入,高16位表示读锁的状态,右移16位表示持有读锁的线程数,那么该读锁是如何记录每个线程的重入呢?
ConcurrentHashMap 源码深度解析(二)(java8)直呼 Doug Lea 是真的细(带你参透扩容机制)
扩容是重头戏,看过的人都说难。确实,和java7版本比起来,难度真不是一个量级的。有些细节看着莫名其妙,一想就是好几天,看似想明白也只能算是猜想合理,直呼Doug Lea的心思是真的细啊!
ConcurrentHashMap 源码深度解析(一)(java8)不可不知的基本概念(助你拿下源码事半功倍)
ConcurrentHashMap java1.8数据结构采用数组+链表+红黑树,废弃分段锁`Segement`,进一步降低锁的粒度,可将锁直接加在数组占位节点上。
ConcurrentHashMap 源码深度解析(java7)原来如此简单 (写的真好,建议收藏)
ConcurrentHashMap算是java基础中非常基本的知识点,不仅在日常开发中经常用到,面试中也是经久不衰的话题。它基本沿用HashMap的接口定义,使得即使不了解其底层原理,也能无缝切换。
ReentrantLock 原理分析
ReentrantLock是Java并发包中提供的一个可重入的互斥锁,掌握它是提升Java内功的必备。
Java 中 CAS 原理分析 (volatile 和 synchronized 浅析)
CAS英文解释是比较和交换,是cpu底层的源语,是解决共享变量原子性实现方案,它定义了三个变量,内存地址值对应V,期待值E和要修改的值U,如下图所示,这些变量都是在高速缓存中的,如果两个线程A,B分别通过cas方式同时修改共享变量,假设当A线程先获取时间
万字图文 | 聊一聊 ReentrantLock 和 AQS 那点事(看完不会你找我)
文章以 ReentrantLock 作为切入点,讲述了其公平锁和非公平锁的概念,以及对应 AQS 中 CLH、AOS 等不容易被发现的概念