线程是进程中的一个独立控制单元,线程在控制着进程的执行,一个进程中至少有一个线程。多线程可以更好地利用cpu的资源,线程之间还能进行数据共享。
在Java中,一个线程是指进程中的一个执行流程,一个进程可以运行多个线程,Java中每个线程都有一个调用栈,即使不在程序中创建任何新的线程,也有一个main()方法运行在一个线程内,称为主线程,一旦创建一个新的线程,就产生一个新的调用栈。
通过多线程专题课程的系统学习,让大家一次性搞明白Java中的多线程。
课程目标:
通过本系列课程的学习,一次性搞明白多线程,提升自身技术能力与价值。
适用人群:
具有Java基础的人群,希望系统学习Java多线程的人群。
多线程学习教程:
https://www.bilibili.com/video/BV1Rv411y7MU
课程目录:
•001.多线程:进程线程与主线程的概念
•002.多线程:串行并发与并行
•003.多线程:以继承Thread类的形式创建线程
•004.多线程:多线程运行结果是随机的
•005.多线程:实现Runnable接口的形式创建线程
•006.多线程:currentThread方法
•007.多线程:currentThread的一个复杂案例
•008.多线程:isAlive方法测试线程活动状态
•009.多线程:sleep方法线程休眠
•010.多线程:使用sleep方法设计一个倒计时器
•011.多线程:getid方法获得线程编号
•012.多线程:yield方法放弃CPU资源
•013.多线程:setPriority设置线程优先级
•014.多线程:interrupt中断线程
•015.多线程:setDaemon设置守护线程.
•016.多线程:线程生命周期介绍
•017.多线程:线程状态图
•018.多线程:多线程的优势
•019.多线程:多线程编程存在的问题与风险
•020.多线程:线程的原子性1
•021.多线程:线程的原子性2
•022.多线程:线程可见性1
•023.多线程:线程可见性2
•024.多线程:线程有序性之重排序概念
•025.多线程:线程有序性之指令重排序
•026.多线程:线程有序性之存储子系统重排序1
•027.多线程:线程有序性之存储子系统重排序2
•028.多线程:貌似串行语义
•029.多线程:保证内存访问顺序
•030.多线程:Java内存模型1
•031.多线程:Java内存模型2
•032.多线程:线程同步机制简介
•033.多线程:锁概述
•034.多线程:锁的作用
•035.多线程:锁的相关概念
•036.多线程:synchronized关键字介绍
•037.多线程:同步代码块this锁对象
•038.多线程:锁对象不同不能实现同步
•039.多线程:使用常量作为锁对象
•040.多线程:同步实例方法
•041.多线程:同步静态方法
•042.多线程:与同步方法比同步代码块执行效率高
•043.多线程:脏读
•044.多线程:线程出现异常会自动释放锁
•045.多线程:死锁
•046.多线程:volatile的作用
•047.多线程:volatile与synchronized的区别
•048.多线程:volatile不具备原子性
•049.多线程:使用原子类进行自增操作
•050.多线程:CAS简介
•051.多线程:使用CAS实现线程安全的计数器
•052.多线程:CAS中的ABA问题
•053.多线程:原子变量类概述
•054.多线程:使用AtomicLong定义计数器
•055.多线程:模拟用户请求
•056.多线程:AtomicIntegerArray的基本操作
•057.多线程:多线程中使用原子数组
•058.多线程:AtomicIntegerFiledUpdater更新字段
•059.多线程:AtomicReference原子操作对象
•060.多线程:演示AtomicReference中的ABA问题
•061.多线程:使用AtomicStampedReference解决CAS中的ABA问题
•062.多线程:什么是等待通知机制
•063.多线程:等待通知机制的实现
•064.多线程:wait方法的基本使用
•065.多线程:使用notify唤醒线程
•066.多线程:notify不会立即释放涣对象
•067.多线程:interrupt会中断线程的wait等待
•068.多线程:notify()与notifyAll()方法区别
•069.多线程:wait(long)方法的使用
•070.多线程:通知过早
•071.多线程:wait条件发生了变化1
•072.多线程:wait条件发生了变化2
•073.多线程:生产者-消费者模式之操作值
•074.多线程:一生产一消费操作值
•075.多线程:多生产多消费操作值
•076.多线程:一生产一消费操作栈1
•077.多线程:多生产多消费操作栈2
•078.多线程:通过管道流实现线程间通信1
•079.多线程:ThreadLocal的基本使用
•080.多线程:ThreadLocal应用
•081.多线程:ThreadLocal指定初始值
•082.多线程:介绍锁的可重入性
•083.多线程:Lock显示锁的基本使用1
•084.多线程:Lock显示锁的基本使用2
•085.多线程:ReentrantLock锁的可重入性
•086.多线程:lockInterruptibly方法的使用
•087.多线程:lockInterruptibly方法可以解决死锁问题(上)
•088.多线程:lockInterruptibly方法可以解决死锁问题(下)
•089.多线程:tryLock() 方法的基本使用1
•090.多线程:tryLock() 方法的基本使用2
•091.多线程:tryLock()方法可以避免死锁
•092.多线程:Condition实现等待与通知
•093.多线程:使用多个Condition实现通知部分线程
•094.多线程:Condition实现两个线程交替打印
•095.多线程:Condition实现多对多的生产者与消费者模式
•096.多线程:公平锁与非公平锁
•097.多线程:getHoldCount方法
•098.多线程:getQueueLength返回等待锁的线程数
•099.多线程:getWaitQueueLength返回在Condition条件上等待的线程预估数
•100.多线程:hasQueuedThread查询指定的线程是否在等待获得锁
•101.多线程:hasWaiters查询是否有线程正在等待指定以Condition条件
•102.多线程:isHeldByCurrentThread判断锁是否被当前线程持有
•103.多线程:isLocked()判断锁是否被线程持有
•104.多线程:读写锁概述
•105.多线程:读写锁的基本使用
•106.多线程:读读共享
•107.多线程:写写互斥
•108.多线程:读写互斥
•109.多线程:线程组概述
•110.多线程:创建线程组
•111.多线程:线程组的基本操作
•112.多线程:复制线程组中的内容
•113.多线程:批量中断线程组中的线程
•114.多线程:设置守护线程组
•115.多线程:捕获线程的运行异常
•116.多线程:设置线程异常的回调接口
•117.多线程:注入Hook钩子线程
•118.多线程:什么是线程池
•119.多线程:JDK提供与线程池相关的API
•120.多线程:线程池的基本使用
•121.多线程:线程池的计划任务
•122.多线程:核心线程池的底层实现-1
•123.多线程:核心线程池的底层实现-2
•124.多线程:核心线程池的底层实现-3
•125.多线程:线程池的拒绝策略
•126.多线程:ThreadFactory线程工厂
•127.多线程:监控线程池(超时了)
•128.多线程:扩展线程池1
•129.多线程:扩展线程池2
•130.多线程:优化线程池大小
•131.多线程:线程池死锁
•132.多线程:线程池中的异常跟踪1
•133.多线程:线程池中的异常跟踪2
•134.多线程:ForkJoinPool线程池1
•135.多线程:ForkJoinPool线程池2
•136.多线程:ForkJoinPool线程池3
•137.多线程:保障线程安全设计技术之局部变量
•138.多线程:保障线程安全设计技术之无状态对象
•139.多线程:保障线程安全设计技术之不可变对象
•140.多线程:保障线程安全设计技术之线程特有对象
•141.多线程:保障线程安全设计技术之装饰器模式
•142.多线程:提高锁性能的建议之减少锁的持有时间
•143.多线程:提高锁性能的建议之减小锁粒度
•144.多线程:提高锁性能的建议之使用读写锁代替独占锁
•145.多线程:提高锁性能的建议之锁分离
•146.多线程:提高锁性能的建议之锁粗化
•147.多线程:JVM对锁的优化之锁偏向
•148.多线程:JVM对锁的优化之轻量级锁