Java基础案例教程--第十二讲:多线程

第十二讲:多线程

一.预习笔记

1.线程概述

进程:在一个操作系统中,每个独立执行的程序都可以称为一个进程
线程:在一个进程中可以有多个执行单元同时执行,而这些执行单元就是线程
*创建进程比创建线程开销大,尤其时在Windows系统
*进程间通信比线程间通信慢,因为线程间通信就是读写同一个变量,故而速度很快

2.线程的创建

线程的创建一:继承Thread类,重写run方法,在测试类创建对象并调用start方法开启线程

Java基础案例教程--第十二讲:多线程_第1张图片

线程的创建二:实现Runnable接口,重写run方法,在在测试类创建对象并调用Thread有参构造创建线程对象再调用start方法开启线程

Java基础案例教程--第十二讲:多线程_第2张图片

两种创建线程的比较

Java基础案例教程--第十二讲:多线程_第3张图片

线程的创建(**了解https://blog.csdn.net/qq_35241080/article/details/82530443)

3.线程的生命周期及状态转换

生命周期:线程的生命周期可以分为5个阶段,分别是:
  新建状态:创建一个线程对象后,该线程对象就处于新建状态,它此时仅仅由Java虚拟机分配了内存,没有任何线程的动态特征
  就绪状态:当线程对象调用了start后,该线程就进入了就绪状态,位于线程队列中,具备运行的条件,能否获取CPU的使用权并开始运行,需等待系统的调度
  运行状态:如果处于就绪状态的线程获取了CPU的使用权并开始执行run方法中的线程执行体,那该线程就处于运行状态
  阻塞状态:一个正在执行的线程在某些特殊情况下,会让出CPU的使用权并暂时中止自己的执行,进入到阻塞状态
  死亡状态:如果线程调用stop方法或者run方法执行完毕,又或者是线程抛出了一个未捕获的异常、错误,那该线程就进入了死亡状态
状态转换:

Java基础案例教程--第十二讲:多线程_第4张图片

4.线程的调度

线程的调度:Java虚拟机会按照特定的机制为程序中的每个线程分配CPU的使用权,这种机制称为线程的调度
线程的优先级:1-10,值越大优先级越高(只是获取CPU的概率增大,并不是一定能获取CPU使用权)
线程的休眠:sleep()
线程让步:yield()
线程插队:join()

Java基础案例教程--第十二讲:多线程_第5张图片
Java基础案例教程--第十二讲:多线程_第6张图片

5.多线程同步

多线程容易出现bug:
bug1:

Java基础案例教程--第十二讲:多线程_第7张图片
Java基础案例教程--第十二讲:多线程_第8张图片
Java基础案例教程--第十二讲:多线程_第9张图片

bug2:

Java基础案例教程--第十二讲:多线程_第10张图片
Java基础案例教程--第十二讲:多线程_第11张图片
Java基础案例教程--第十二讲:多线程_第12张图片

同步代码块后:

Java基础案例教程--第十二讲:多线程_第13张图片
Java基础案例教程--第十二讲:多线程_第14张图片
Java基础案例教程--第十二讲:多线程_第15张图片

同步方法后:

Java基础案例教程--第十二讲:多线程_第16张图片
Java基础案例教程--第十二讲:多线程_第17张图片
Java基础案例教程--第十二讲:多线程_第18张图片

线程死锁:未能获得有效资源

二.课堂笔记

三.课后回顾





–仰望星空,脚踏实地;以梦为马,不负韶华

你可能感兴趣的:(Java基础,多线程,java)