JavaSE之多线程


多线程

多任务执行,多路径执行

  1. 优点:

    1. 提高性能

    2. 提高效率

  2. 进程与线程之间的区别

    1. 进程:系统中的程序,一个进程之间可以包含1~n个线程,系统中资源分配的最小单位,每个进程都有自己的代码与数据空间,进程之间的切换开销较大

    2. 程序中的顺序流,线程是cpu调度与执行的最小单位,多个线程之间共享进程的代码和数据空间,每一个线程都有自己的程序计数器运行栈,线程之间切换开销较小,一个cpu同一时刻只能调度一个线程

  3. 线程学习内容

    1. 线程的概念,优缺点

    2. 创建线程的方式 *

    3. 线程的状态

    4. 线程安全问题 *

    5. 线程通信

  4. 创建线程的方式

    1. 继承Thread,重写run方法 + start开启线程

    2. 实现Runnable接口,重写run方法 + start开启线程

      1. 优点:接口多实现,类的单继承。实现资源共享

      2. 重写方法对异常抛出的要求:重写方法上抛出的异常类型<=被重写方法上异常的抛出类型

    3. 实现Callable接口,重写call方法 + 线程池

      1. 优点:call方法可以抛出异常,可以定义返回值,run方法不可以

  5. 继承Thread,重写run方法 + start开启线程

 

线程安全

  1. 定义:当多个线程同时操作同一份资源,才有可能出现线程不安全问题

  2. 同步锁 synchronized:有可能出现数据不安全的代码段,让多个线程排队执行

  3. 同步的使用

    1. 同步条件 : 协调多个线程排队执行的条件 -->对象的锁

    2. 同步的代码 : 需要多个线程排队执行的代码

  4. synchronized用法

    1. 修饰方法 : 同步方法

      1. 同步实例方法

        1. 条件 : 调用成员方法的对象

        2. 代码范围 : 整个方法体

      2. 同步静态方法

        1. 条件 : 锁类->锁的类的Class对象->一个类只有一个,加载到内存中究存在Class对象,不变,唯一

        2. 代码范围 : 整个方法体

    2. 修饰块 : 同步块 synchronized(条件){ 排队执行的代码; }

  5. 注意

    1. 同步的代码范围太大,效率太低

    2. 同步的代码范围太小,锁不住,不安全