1,进程:
    应用程序的执行实例,有独立的内存空间和系统资源
    2,线程:
    CPU调度和分派,的基本单位,进程中执行运算的最小单位,可完成一个独立的顺序控制流程
    一,什么叫多线程
    如果在一个进程中同时运行了多个线程,用来完成不同的工作,则称之为“多线程”
    多个线程交替占用CPU资源,而非真正的并行执行
    多线程的好处:
    1,充分利用CPU的资源
    2,简化编程模型
    3,良好的用户体验
    Thread类的常用方法:
    image.png
    二,Java创建两种线程的方法
    1,继承Thread类
    2,实现Runnable接口
    使用线程的步骤:
    定义线程—-创建线程对象—-启动线程
    使用继承Thread类的步骤:
    1,线程类继承Thread
    2,重写run方法
    3,创建线程对象,调用start()方法启动线程
    线程休眠(sleep()): //线程阻塞
    注意:需要做异常处理
    单位:毫秒
    使用Runnable接口的步骤:
    1.定义MyRunnable类实现Runnable接口
    2.实现run()方法,编写线程执行体
    3.创建线程对象,调用start()方法启动线程
    继承Thread类
    1,编写简单,可直接操作线程
    2,适用于单继承
    实现Runnable接口
    1,避免单继承局限性
    2,便于共享资源
    推荐使用Runnable接口方式
    三,线程的五个周期
    image.png
    四,线程调度
    image.png
    int getPriority():
    image.png
    join():
    image.png
    yied():
    image.png
    比较sleep()方法和yield()方法
    共同点
    Thread类的静态方法
    会使当前处于运行状态的线程放弃CPU使用权,将运行机会让给其他线程
    不同点
    sleep()方法会给其他线程运行机会,不考虑其他线程的优先级,因此较低优先级线程可能会获得运行机会
    yield()方法只会将运行机会让给相同优先级或者更高优先级的线程
    调用sleep()方法需处理InterruptedException异常,而调用yield()方法无此要求
    五,线程同步
    image.png
    同步方法:
    image.png
    线程安全:
    image.png
    总结:
    image.png