Java笔记 --- 七、多线程

七、多线程

线程

  • 线程是操作系统能够运行调度的最小单位

  • 被包含在进程之中,是进程的实际运行单位

  • 应用软件中相互独立,可以同时运行的功能

  • 每一个线程都有自己的栈

并发和并行

  1. 并发:在同一时刻,有多个指令在单个CPU上交替执行

  2. 并行:在同一时刻,有多个指令在多个CPU上同时执行

多线程的实现方式

继承Thread类

  1. 定义一个类继承Thread

  2. 重写run方法

  3. 创建类的对象,调用start()方法开启线程

实现Runnable接口

  1. 定义一个类实现Runnable接口

  2. 重写run方法

  3. 创建类的对象

  4. 创建一个Thread类的对象(形参是自己创建类的对象),开启线程

  • run方法里面可以获取当前线程的对象

  • Thread t = Thread.currentThread();

利用Callable接口和Future接口

Java笔记 --- 七、多线程_第1张图片

  • 实现接口时的泛型代表运行结果的类型

Java笔记 --- 七、多线程_第2张图片

Java笔记 --- 七、多线程_第3张图片

成员方法

Java笔记 --- 七、多线程_第4张图片

  • 线程的默认名字 Thread-X(X序号,从0开始)

  • 抢占式调度(随机)多个线程抢占CPU的执行权和时间

  • 优先级 1~10 默认5

Java笔记 --- 七、多线程_第5张图片

  • 不是立马结束,陆续结束

线程的生命周期

Java笔记 --- 七、多线程_第6张图片

同步代码块

Java笔记 --- 七、多线程_第7张图片

  • 锁对象是唯一的

    1. static Object obj = new Object();

    2. 用当前类的字节码文件对象 MyThread.class

同步方法

Java笔记 --- 七、多线程_第8张图片

Lock锁

Java笔记 --- 七、多线程_第9张图片

死锁

  • 是一个错误,线程A和线程B分别用两把锁,程序卡死

  • 互相都等另一个线程的锁释放

等待唤醒机制

  • 生产者和消费者

  • 轮流执行

Java笔记 --- 七、多线程_第10张图片

阻塞队列

Java笔记 --- 七、多线程_第11张图片

  • 在main方法中创建实现类

  • 在对应的线程类中需要在成员变量写对应的 ArrayBlockingQueue queue;

  • 并在构造方法中也实现

  • queue对应的方法有

  1. put

  2. take

线程的状态

Java笔记 --- 七、多线程_第12张图片

  • 没有运行状态

Java笔记 --- 七、多线程_第13张图片

线程池

Java笔记 --- 七、多线程_第14张图片

Java笔记 --- 七、多线程_第15张图片

Java笔记 --- 七、多线程_第16张图片

自定义线程池

Java笔记 --- 七、多线程_第17张图片

Java笔记 --- 七、多线程_第18张图片

Java笔记 --- 七、多线程_第19张图片

最大并行数

  • 4核8线程

  • 8就是最大并行数

CPU密集型运算

  • 计算比较多

    • 线程池数量=最大并行数+1

I/O密集型运算

  • 读取本地文件和数据库

  • thread dump工具可以计算时间

你可能感兴趣的:(java,笔记,idea)