带你一次搞明白Java多线程,该套课程一共11个章节,为视频课程,附带相关资料。
目录
├─带你一次搞明白Java多线程(一)
│ 1-1 进程线程与主线程的概念
│ 1-2 串行并发与并行
│ 2-1 以继承Thread类的形式创建线程
│ 2-10 yield方法放弃CPU资源
│ 2-11 setPriority设置线程优先级
│ 2-12 interrupt中断线程
│ 2-13 setDaemon设置守护线程.
│ 2-2 多线程运行结果是随机的
│ 2-3 实现Runnable接口的形式创建线程
│ 2-4 currentThread方法
│ 2-5 currentThread的一个复杂案例
│ 2-6 isAlive方法测试线程活动状态
│ 2-7 sleep方法线程休眠
│ 2-8 使用sleep方法设计一个倒计时器
│ 2-9 getid方法获得线程编号
│ 3-1 线程生命周期介绍
│ 3-2 线程状态图
│ 3-3 多线程的优势
│ 3-4 多线程编程存在的问题与风险
│
├─带你一次搞明白Java多线程(七)
│ 1-1 tryLock()方法可以避免死锁
│ 1-10 hasQueuedThread查询指定的线程是否在等待获得锁
│ 1-11 hasWaiters查询是否有线程正在等待指定以Condition条件
│ 1-12 isHeldByCurrentThread判断锁是否被当前线程持有
│ 1-13 isLocked()判断锁是否被线程持有
│ 1-2 Condition实现等待与通知
│ 1-3 使用多个Condition实现通知部分线程
│ 1-4 Condition实现两个线程交替打印
│ 1-5 Condition实现多对多的生产者与消费者模式
│ 1-6 公平锁与非公平锁
│ 1-7 getHoldCount方法
│ 1-8 getQueueLength返回等待锁的线程数
│ 1-9 getWaitQueueLength返回在Condition条件上等待的线程预估数
│
├─带你一次搞明白Java多线程(三)
│ 1-1 线程同步机制简介
│ 1-2 锁概述
│ 1-3 锁的作用
│ 1-4 锁的相关概念
│ 2-1 synchronized关键字介绍
│ 2-10 死锁
│ 2-2 同步代码块this锁对象
│ 2-3 锁对象不同不能实现同步
│ 2-4 使用常量作为锁对象
│ 2-5 同步实例方法
│ 2-6 同步静态方法
│ 2-7 与同步方法比同步代码块执行效率高
│ 2-8 脏读
│ 2-9 线程出现异常会自动释放锁
│ 3-1 volatile的作用
│ 3-2 volatile与synchronized的区别
│ 3-3 volatile不具备原子性
│ 3-4 使用原子类进行自增操作
│
├─带你一次搞明白Java多线程(九)
│ 1-1 捕获线程的运行异常
│ 1-2 设置线程异常的回调接口
│ 1-3 注入Hook钩子线程
│ 2-1 什么是线程池
│ 2-2 JDK提供与线程池相关的API
│ 2-3 线程池的基本使用
│ 2-4 线程池的计划任务
│ 2-5 核心线程池的底层实现-1
│ 2-6 核心线程池的底层实现-2
│ 2-7 核心线程池的底层实现-3
│ 2-8 线程池的拒绝策略
│
├─带你一次搞明白Java多线程(二)
│ 1-1 线程的原子性1
│ 1-2 线程的原子性2
│ 2-1 线程可见性1
│ 2-2 线程可见性2
│ 3-1 线程有序性之重排序概念
│ 3-2 线程有序性之指令重排序
│ 3-3 线程有序性之存储子系统重排序1
│ 3-4 线程有序性之存储子系统重排序2
│ 3-5 貌似串行语义
│ 3-6 保证内存访问顺序
│ 4-1 Java内存模型1
│ 4-2 Java内存模型2
│
├─带你一次搞明白Java多线程(五)
│ 1-1 interrupt会中断线程的wait等待
│ 1-2 notify()与notifyAll()方法区别
│ 1-3 wait(long)方法的使用
│ 1-4 通知过早
│ 1-5 wait条件发生了变化1
│ 1-6 wait条件发生了变化2
│ 2-1 生产者-消费者模式之操作值
│ 2-2 一生产一消费操作值
│ 2-3 多生产多消费操作值
│ 2-4 一生产一消费操作栈1
│ 2-5 多生产多消费操作栈2
│ 2-6 通过管道流实现线程间通信1
│
├─带你一次搞明白Java多线程(八)
│ 1-1 读写锁概述
│ 1-2 读写锁的基本使用
│ 1-3 读读共享
│ 1-4 写写互斥
│ 1-5 读写互斥
│ 2-1 线程组概述
│ 2-2 创建线程组
│ 2-3 线程组的基本操作
│ 2-4 复制线程组中的内容
│ 2-5 批量中断线程组中的线程
│ 2-6 设置守护线程组
│
├─带你一次搞明白Java多线程(六)
│ 1-1 ThreadLocal的基本使用
│ 1-2 ThreadLocal应用
│ 1-3 ThreadLocal指定初始值
│ 2-1 介绍锁的可重入性
│ 2-2 Lock显示锁的基本使用1
│ 2-3 Lock显示锁的基本使用2
│ 2-4 ReentrantLock锁的可重入性
│ 2-5 lockInterruptibly方法的使用
│ 2-6 lockInterruptibly方法可以解决死锁问题(上)
│ 2-7 lockInterruptibly方法可以解决死锁问题(下)
│ 2-8 tryLock() 方法的基本使用1
│ 2-9 tryLock() 方法的基本使用2
│
├─带你一次搞明白Java多线程(十一)
│ 1-1 保障线程安全设计技术之局部变量
│ 1-2 保障线程安全设计技术之无状态对象
│ 1-3 保障线程安全设计技术之不可变对象
│ 1-4 保障线程安全设计技术之线程特有对象
│ 1-5 保障线程安全设计技术之装饰器模式
│ 2-1 提高锁性能的建议之减少锁的持有时间
│ 2-2 提高锁性能的建议之减小锁粒度
│ 2-3 提高锁性能的建议之使用读写锁代替独占锁
│ 2-4 提高锁性能的建议之锁分离
│ 2-5 提高锁性能的建议之锁粗化
│ 3-1 JVM对锁的优化之锁偏向
│ 3-2 JVM对锁的优化之轻量级锁
│
├─带你一次搞明白Java多线程(十)
│ 1-1 ThreadFactory线程工厂
│ 1-2 监控线程池(超时了)
│ 1-3 扩展线程池1
│ 1-4 扩展线程池2
│ 1-5 优化线程池大小
│ 1-6 线程池死锁
│ 1-7 线程池中的异常跟踪1
│ 1-8 线程池中的异常跟踪2
│ 2-1 ForkJoinPool线程池1
│ 2-2 ForkJoinPool线程池2
│ 2-3 ForkJoinPool线程池3
│
└─带你一次搞明白Java多线程(四)
1-1 CAS简介
1-2 使用CAS实现线程安全的计数器
1-3 CAS中的ABA问题
2-1 原子变量类概述
2-2 使用AtomicLong定义计数器
2-3 模拟用户请求
2-4 AtomicIntegerArray的基本操作
2-5 多线程中使用原子数组
2-6 AtomicIntegerFiledUpdater更新字段
2-7 AtomicReference原子操作对象
2-8 演示AtomicReference中的ABA问题
2-9 使用AtomicStampedReference解决CAS中的ABA问题
3-1 什么是等待通知机制
3-2 等待通知机制的实现
3-3 wait方法的基本使用
3-4 使用notify唤醒线程
3-5 notify不会立即释放涣对象