第十二讲:多线程
一.预习笔记
1.线程概述
进程:在一个操作系统中,每个独立执行的程序都可以称为一个进程
线程:在一个进程中可以有多个执行单元同时执行,而这些执行单元就是线程
*创建进程比创建线程开销大,尤其时在Windows系统
*进程间通信比线程间通信慢,因为线程间通信就是读写同一个变量,故而速度很快
2.线程的创建
线程的创建一:继承Thread类,重写run方法,在测试类创建对象并调用start方法开启线程
线程的创建二:实现Runnable接口,重写run方法,在在测试类创建对象并调用Thread有参构造创建线程对象再调用start方法开启线程
两种创建线程的比较
线程的创建(**了解https://blog.youkuaiyun.com/qq_35241080/article/details/82530443)
3.线程的生命周期及状态转换
生命周期:线程的生命周期可以分为5个阶段,分别是:
新建状态:创建一个线程对象后,该线程对象就处于新建状态,它此时仅仅由Java虚拟机分配了内存,没有任何线程的动态特征
就绪状态:当线程对象调用了start后,该线程就进入了就绪状态,位于线程队列中,具备运行的条件,能否获取CPU的使用权并开始运行,需等待系统的调度
运行状态:如果处于就绪状态的线程获取了CPU的使用权并开始执行run方法中的线程执行体,那该线程就处于运行状态
阻塞状态:一个正在执行的线程在某些特殊情况下,会让出CPU的使用权并暂时中止自己的执行,进入到阻塞状态
死亡状态:如果线程调用stop方法或者run方法执行完毕,又或者是线程抛出了一个未捕获的异常、错误,那该线程就进入了死亡状态
状态转换:
4.线程的调度
线程的调度:Java虚拟机会按照特定的机制为程序中的每个线程分配CPU的使用权,这种机制称为线程的调度
线程的优先级:1-10,值越大优先级越高(只是获取CPU的概率增大,并不是一定能获取CPU使用权)
线程的休眠:sleep()
线程让步:yield()
线程插队:join()
5.多线程同步
多线程容易出现bug:
bug1:
bug2:
同步代码块后:
同步方法后:
线程死锁:未能获得有效资源
二.课堂笔记
三.课后回顾
–仰望星空,脚踏实地;以梦为马,不负韶华