![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发编程
主要讲解了JDK源码分析
开水格
修行之道: 关注大师的言行, 跟随大师的举动, 和大师一并修行, 领会大师的意境, 成为真正的大师。
编程是一门技术,更是一门艺术。
展开
-
面试系列:synchronized 、 volatile 和 CAS
Synchronized的底层原理?公平锁还是非公平锁?Synchronized的锁升级过程?Synchronized的非公平锁实现方式?什么是偏向锁?自旋有什么优点和缺点?synchronized优化的锁膨胀?volatile的实现原理?volatile一定是安全的吗?volatile会引起死锁吗?cas是什么,cas的是实现原理...原创 2020-10-28 14:47:03 · 269 阅读 · 0 评论 -
线程池:ScheduledThreadPoolExecutor 源码解析
1、继承关系图2、简介ScheduledThreadPoolExecutor是ThreadPoolExecutor的子类,继承了父类对线程的管理维护功能,通过还可以执行延迟和定时任务。相对于ThreadPoolExecutor 的变化:(1)使用内部类ScheduledFutureTask封装任务(2)使用内部类DelayedWorkQueue作为线程池队列(3)onShutdown方法基于参数配置化去处理shutdown后的任务(4)提供decorateTask方法作为S.原创 2020-10-28 10:10:40 · 432 阅读 · 0 评论 -
线程池:ForkJoinPool 源码解析
1、简介是用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。Fork就是把一个大任务切分为若干子任务并行的执行,Join就是合并这些子任务的执行结果,最后得到这个大任务的结果。ForkJoinPool 是JDK 7加入的一个线程池类。Fork/Join 技术是分治算法(Divide-and-Conquer)的并行实现,它是一项可以获得良好的并行性能的简单且高效的设计技术。目的是为了帮助我们更好地利用多处理器带来的好处,使用所有可用的运算能力来提原创 2020-10-29 08:50:57 · 452 阅读 · 0 评论 -
Executors工厂类:FixedThreadPool、SingleThreadExecutor、CachedThreadPool
1、Executors 简介ThreadPoolExecutor 通常使用 工厂类Executors来创建,Executors可以创建3种类型的ThreadPoolExecutor:FixedThreadPool、SingleThreadExecutor、CachedThreadPool。ThreadPoolExecutor可以灵活的自定义的创建线程池,可定制性很高 想创建好一个合适的线程池比较难 使用稍微麻烦一些 实际中很少使用Executors可以创建4种线程池,这四原创 2020-10-29 08:50:29 · 285 阅读 · 0 评论 -
线程池:ThreadPoolExecutor 源码解析
1、继承关系图2、简介大体过程:1. 当前线程数<核心线程数时,创建线程执行任务。2. 当前线程数>=核心线程数时,把新的任务放入阻塞队列。3. 当queue已满,并且最大线程数 > 核心线程数,创建线程执行任务。4. 当queue已满,并且最大线程数>=核心线程数,默认采取拒绝策略(RejectedExecutionHandler)线程池的优势:降低创建线程和销毁线程的性能开销 提高响应速度,当有新任务需要执行是不需要等待线程创.原创 2020-11-02 10:33:38 · 241 阅读 · 1 评论 -
线程池系列 之 FutureTask 及其底层实现
1、继承关系图2、Runnable 接口2.1、Runnable 接口简介Runnable接口是线程辅助类,仅定义了一个方法run()方法。灵活:Runnable可以继承其他类实现对Runnable实现类的增强,避免了Thread类由于继承Thread类而无法继承其他类的问题共享资源:Runnable接口的run()方法可以被多个线程共享,适用于多个进程处理一种资源的问题Runnable或Thread的区别:(1)Runnable的实现方式是实现其接口即可(2)Threa.原创 2020-10-28 10:12:09 · 836 阅读 · 3 评论 -
Executor框架底层:Executor、ExecutorService、AbstractExecutorService 和 ScheduledExecutorService
1、什么是Executor框架?我们知道线程池就是线程的集合,线程池集中管理线程,以实现线程的重用,降低资源消耗,提高响应速度等。线程用于执行异步任务,单个的线程既是工作单元也是执行机制,从JDK1.5开始,为了把工作单元与执行机制分离开,Executor框架诞生了,他是一个用于统一创建与运行的接口。Executor框架实现的就是线程池的功能。2、Executor框架结构图解2.1、Executor框架包括3大部分(1)任务。也就是工作单元,包括被执行任务需要实现的接口:Runnable.原创 2020-10-28 10:10:15 · 389 阅读 · 0 评论 -
更好的异步执行器:CompletionService 和 ExecutorCompletionService 源码分析
1、简介2、CompletionService2.1、简介2.2、源码public interface CompletionService<V> { Future<V> submit(Callable<V> task); Future<V> submit(Runnable task, V result); Future<V> take() throws Interru.原创 2020-10-28 10:12:32 · 195 阅读 · 0 评论 -
线程池的实现原理
1、线程池简介多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力。假设一个服务器完成一项任务所需时间为:T1 创建线程时间,T2 在线程中执行任务的时间,T3 销毁线程时间。如果:T1 + T3 远大于 T2,则可以采用线程池,以提高服务器性能。一个线程池包括以下四个基本组成部分:1、线程池管理器(ThreadPool):用于创建并管理线程池,包括 创建线程池,销毁线程池,添加新任务;2、工作线程(PoolWorker):线...原创 2020-11-02 10:33:56 · 112 阅读 · 0 评论 -
ConcurrentHashMap 源码分析(JDK1.7)
1、原理分析原创 2020-10-27 22:14:19 · 202 阅读 · 0 评论 -
ConcurrentHashMap 在 JDK1.7 和 JDK1.8之间的区别 与 联系
1、JDK1.7中的特点2、JDK1.8中的特点3、联系4、区别5、JDK1.8相对于JDK1.7的进步点原创 2020-10-27 22:14:59 · 760 阅读 · 0 评论 -
ConcurrentHashMap 源码深入分析(JDK1.8)
1、ConcurrentHashMap 简介1.1、ConcurrentHashMap 与 HashMap 、 Hashtable 的比较HashMap不是线程安全的,所以在处理并发的时候会出现问题。而HashTable虽然是线程安全的,但是是通过整个来加锁的方式,当一个线程在写操作的时候,另外的线程则不能进行读写。而ConcurrentHashMap则可以支持并发的读写。跟1.7...原创 2020-10-27 22:12:57 · 252 阅读 · 0 评论 -
Condition 源码分析(JDK1.8)
1、Condition 接口介绍condition与Lock的实现类结合使用。 如果Lock替换了synchronized方法和语句的使用,则Condition将替换Object监视方法(wait,notify和notifyAll)的使用。condition,也称为condition queue或者condition variables,能让一个线程阻塞在条件变量上,直到其他线程通知该线程...原创 2020-10-28 10:11:23 · 319 阅读 · 1 评论 -
LockSupport源码分析(JDK1.8)
1、LockSupport 介绍LockSupport 和 CAS 是Java并发包中很多并发工具控制机制的基础,它们底层其实都是依赖Unsafe实现。LockSupport是用来创建锁和其他同步类的基本线程阻塞原语。LockSupport 提供park()和unpark()方法实现阻塞线程和解除线程阻塞,LockSupport和每个使用它的线程都与一个许可(permit)关联。permi...原创 2020-10-28 10:15:20 · 138 阅读 · 0 评论 -
ReentrantReadWriteLock源码分析(JDK1.8)
1、简介写线程访问时,所有其他读和写线程全部被阻塞i 读线程访问时,写线程被阻塞 写锁 可以降级为 读锁 因为现实中,读的次数远远多于写的次数2、继承关系图3、ReadWriteLock接口介绍内里面有2个方法的定义:readLock() 和 writeLock()package java.util.concurrent.locks;public interf...原创 2020-10-28 10:13:08 · 101 阅读 · 0 评论 -
ReenTrantLock源码分析(JDK1.8)
1、重入锁ReentrantLock简介该锁支持一个线程对资源的重复加锁,注意不是支持多个线程同时获取资源 获取锁时,支持公平性 和 非公平性 synchronized 隐式的支持重进入2、公平性与非公平性的比较 公平锁的效率没有 非公平高 公平锁能够减少饥饿 默认是非公平,可以从源码中看出来 3、继承关系图4、源码分析...原创 2020-10-28 10:13:51 · 127 阅读 · 0 评论 -
自定义同步组件TwinsLock
1、首先明确:自定义同步器一般作为自定义同步组件的内部类2、需求分析同一时刻最多允许2个线程同时访问共享式,需要重写方法 tryAcquireShare(int) 和 tryReleaseShare(int) 定义资源数为2,status正常取值为 0,1,23、代码import java.util.concurrent.TimeUnit;import java...原创 2020-11-02 10:34:15 · 168 阅读 · 0 评论 -
AQS源码分析(JDK1.8)
1.AQS是实现各种锁的基础,因此必须要非常了解2.原创 2020-10-28 10:14:33 · 245 阅读 · 0 评论