随着现代处理器工艺的提升,多核处理器已成为标准,使得多线程编程在充分利用计算机资源,提高软件服务质量方面扮演了越来越重要的角色,因此掌握多线程技能对广大开发人员的重要性由此可见一斑,也就是说多线程就是构建高性能的应用程序的关键技术,线程是Java平台的基石,同学们自己在对Thread类的学习过程中会遇到太多的问题、弯路以及所谓的坑。
为了带领学员在技术层面上进行更高的追求,老崔将多线程的技术点进行了整理,我秉承大道至简的主导思想,只介绍java多线程开发中最值得关注的内容,希望能为大家拓展出更深入,更全面的思路。
老崔在讲这门课程时投入了很多的精力,以基本概念/原理/方法为主线,辅以丰富的实战案例与生活化实例,循序渐进的,系统的介绍了Java平台下的多线程编程核心技术。老崔尽量减少啰嗦的语言,把这门课讲的通俗易懂,全部用案例讲解技术点的实现,使大家看到代码和运行结果后就可以知道要解决什么问题,可以让大家在最短的时间学完相关的知识点,明白这些知识点是如何应用的,以及在使用时要避免什么,帮助同学们构建可靠的,可伸缩的和可维护的多线程应用程序。为了照顾一些基础不太好的同学,老崔采用了手写教案的形式,把语速尽量放慢,给同学们思考的时间,当然同学们在学习时,也可以采用1.5倍速观看,会有一番不同的体验。
本课程采用动力节点PDT4J教学法,以项目案例驱动教学,让大家一次性搞定Java多线程技术,以适应项目开发的需要;
1-1 多线程课程导读
1-2 进程线程与主线程的概念
1-3 串行并发与并行
1-4 以继承Thread类的形式创建线程
1-5 多线程运行结果是随机的
1-6 currentThread方法
1-7 currentThread的一个复杂案例
1-8 isAlive方法测试线程活动状态
1-9 sleep方法线程休眠
1-10 使用sleep方法设计一个倒计时器
1-11 getid方法获得线程编号
1-12 yield方法放弃CPU资源
1-13 setPriority设置线程优先级
1-14 interrupt中断线程
1-15 setDaemon设置守护线程
1-16 线程生命周期介绍
1-17 线程状态图
1-18 多线程的优势
1-19 多线程编程存在的问题与风险
3-1 线程同步机制简介
3-2 锁概述
3-3 锁的作用
3-4 锁的相关概念
3-5 synchronized关键字介绍
3-6 同步代码块this锁对象
3-7 锁对象不同不能实现同步
3-8 使用常量作为锁对象
3-9 同步实例方法
3-10 同步静态方法
3-11 与同步方法比同步代码块执行效率高
3-12 脏读
3-13 线程出现异常会自动释放锁
3-14 死锁
3-15 volatile的作用
3-16 volatile与synchronized的区别
3-17 volatile不具备原子性
3-18 使用原子类进行自增操作
3-19 CAS简介
3-20 使用CAS实现线程安全的计数器
3-21 CAS中的ABA问题
3-22 原子变量类概述
3-23 使用AtomicLong定义计数器
3-24 模拟用户请求
3-25 AtomicIntegerArray的基本操作
3-26 多线程中使用原子数组
3-27 AtomicIntegerFiledUpdater更新字段
3-28 AtomicReference原子操作对象
3-29 演示AtomicReference中的ABA问题
3-30 使用AtomicStampedReference解决CAS中的ABA问题
4-1 什么是等待通知机制
4-2 等待通知机制的实现
4-3 wait方法的基本使用
4-4 使用notify唤醒线程
4-5 notify不会立即释放涣对象
4-6 interrupt会中断线程的wait等待
4-7 notify()与notifyAll()方法区别
4-8 wait(long)方法的使用
4-9 通知过早
4-10 wait条件发生了变化1
4-11 wait条件发生了变化2
4-12 生产者-消费者模式之操作值
4-13 一生产一消费操作值
4-14 多生产多消费操作值
4-15 一生产一消费操作栈1
4-16 多生产多消费操作栈2
4-17 ThreadLocal的基本使用
4-18 ThreadLocal应用
4-19 ThreadLocal指定初始值
5-1 介绍锁的可重入性
5-2 Lock显示锁的基本使用1
5-3 Lock显示锁的基本使用2
5-4 ReentrantLock锁的可重入性
5-5 lockInterruptibly方法的使用
5-6 lockInterruptibly方法可以解决死锁问题(上)
5-7 lockInterruptibly方法可以解决死锁问题(下)
5-8 tryLock()方法的基本使用1
5-9 tryLock()方法的基本使用2
5-10 tryLock()方法可以避免死锁
5-11 Condition实现等待与通知
5-12 使用多个Condition实现通知部分线程
5-13 Condition实现两个线程交替打印
5-14 Condition实现多对多的生产者与消费者模式
5-15 公平锁与非公平锁
5-16 getHoldCount方法
5-17 getQueueLength返回等待锁的线程数
5-18 getWaitQueueLength返回在Condition条件上等待的线程预估数
5-19 hasQueuedThread查询指定的线程是否在等待获得锁
5-20 hasWaiters查询是否有线程正在等待指定以Condition条件
5-21 isHeldByCurrentThread判断锁是否被当前线程持有
5-22 isLocked()判断锁是否被线程持有
5-23 读写锁概述
5-24 读写锁的基本使用
5-25 读读共享
5-26 写写互斥
5-27 读写互斥
6-1 线程组概述
6-2 创建线程组
6-3 线程组的基本操作
6-4 复制线程组中的内容
6-5 批量中断线程组中的线程
6-6 设置守护线程组
6-7 捕获线程的运行异常
6-8 设置线程异常的回调接口
6-9 注入Hook钩子线程
6-10 什么是线程池
6-11 JDK提供与线程池相关的API
6-12 线程池的基本使用
6-13 线程池的计划任务
6-14 核心线程池的底层实现-1
6-15 核心线程池的底层实现-2
6-16 核心线程池的底层实现-3
6-17 线程池的拒绝策略
6-18 ThreadFactory线程工厂
6-19 监控线程池(超时了)
6-20 扩展线程池1
6-21 扩展线程池2
6-22 优化线程池大小
6-23 线程池死锁
6-24 线程池中的异常跟踪1
6-25 线程池中的异常跟踪2
6-26 ForkJoinPool线程池1
6-27 ForkJoinPool线程池2
6-28 ForkJoinPool线程池3
获取步骤