多线程是程序员面试时常常会面对的问题,对多线程概念的掌握和理解水平,也会被一些老鸟用来衡量一个人的编程实力的重要参考指标。
不论是实际工作需要还是为了应付面试,掌握多线程都是程序员职业生涯中一个必须经过的环节。
今天分享的这份是由90年代的清华高材生记录的自己这些年来对多线程与高并发的理解和经验总结,收到了数万人的好评
多线程与高并发大概讲六大块:
- 第一:基本的概念,从什么是线程开始
- 第二:JUC同步工具,就是各种同步锁
- 第三:同步容器
- 第四:线程池
- 第五:高频面试加分项的一些面试用的东西,包括纤程
- 第六:Disruptor,不知道有多少同学听说过这个框架的,这个框架它也是一个MQ框架(Message Queue)叫做消息队列,消息队列非常多,后面还会给大家讲Kafka、RabbitMQ,Redis等这些都是消息队列。Disruptor是目前大家公认的在单机环境上效率最高的、性能最快的MQ。
以上的内容都整合进了这份手册,该手册共分为九个章节,从多线程入门:它的基本概念,到面试题剖析,再到深入线程池源码来理解多线程,深度掌握。
第一节:线程的基本概念
- 基本概念
- 创建线程的几种方式
- 认识几个线程的方法
- 线程状态
- synchronized
- synchronized的底层实现
-
内容回顾
第二节:volatile与CAS
- volatile作用
- 保证线程的可见性
- 禁止指令重新排序
- ABA问题
-
Unsafe
第三节:Atomic类和线程同步新机制
- 为什么Atomic要比Sync快?
- LongAdder为什么要比Atomicx效率要高呢?
- 间歇性复习
- ReentrantLock
- CyclicBarrier
- Phaser
- ReadWriteLock
- Semaphore
- Exchanger
第四节:LockSupport、淘宝面试题与源码阅读方法论
- LockSupport
- LockSupport中parkQ和unpark0方法的实现原理
- 淘宝面试题
- 源码阅读技巧和AQS源码结构解析
- 阅读源码的原则
- AQS源码解析
第五节:AQS源码阅读与强软弱虚4种引用以及ThreadLocal原理与源码
- 通过ReentrantLock来解读AQS源码
- 通过AQS是如何设置链表尾巴的来理解AQS为什么效率这么高
- 为什么是双向链表?
- VarHandle
- ThreadLocal
- ThreadLocal源码
- 为什么要用ThreadLocal?
- Java的四种引用:强软弱虚
第六节:并发容器
- Hashtable - CHM
- HashMap
- SynchronizedHashMap
- ConcurrentHashMap
- From Vector To Queue
- ArrayList
- Vector
- LinkedList
- Queue
- ConcurrentMap
- CopyOnWrite
- BlockingQueue
- LinkedBlockingQueue
- ArrayBlockingQueue
- DelayQueue
- SynchronousQueue
- TransferQueue
第七节:线程池
- corePoolSoze核心线程数
- maximumPoolSize最大线程数
- keepAliveTime生存时间
- TimeUnit.SECONDS生存时间的单位
- 任务队列
- 线程工厂defaultThreadFactory
- 拒绝策略
第八节:线程池与源码阅读
- SingleThreadPool
- CachedPool
- FixedThreadPool
- Cache vs Fixed
- ScheduledPool
- ThreadPoolExecutor源码解析
- 构造方法
- 提交执行task的过程
- addWorker源码解析
- 线程池worker任务单元
- 核心线程执行逻辑-runworker
- WorkStealingPool
- ForkJoinPool
第九节:JMH与Disruptor
- JMH Java准测试工具套件
- Disruptor开发步骤
- ProducerType生产者线程模式
- 消费者异常处理
多线程和高并发这两大块,这两大块是现在面试问得越来越多,也是相对一个初级的程序员向中高级迈进的必须要踏过的一个坎。
记得转发+关注
整理不易,你的支持,我的动力。
祝前程似锦,offer不断!
网友评论