Java多线程-01

  • 目录

    • 基本概念
    • 常见线程的三种方法
    • 线程并发
    • 线程状态及状态转换
    • 线程的不安全性
    • 锁机制
  • 基本概念

    • Java 给多线程编程提供了内置的支持。 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

    • 多线程是多任务的一种特别的形式,但多线程使用了更小的资源开销。

    • 这里定义和线程相关的另一个术语 - 进程:一个进程包括由操作系统分配的内存空间,包含一个或多个线程。一个线程不能独立的存在,它必须是进程的一部分。一个进程一直运行,直到所有的非守护线程都结束运行后才能结束。

    • 多线程能满足程序员编写高效率的程序来达到充分利用 CPU 的目的。

  • 创建线程的三种方式@https://www.runoob.com/java/java-multithreading.html

    1. Thread类

      继承Thread类,

      重写run(),

      调用start()

    2. Runnable接口(最常用)

      创建一个实现 Runnable 接口的类

      在类中重写run()方法

      start运行

    3. Callable接口

      1. 创建 Callable 接口的实现类,并实现 call() 方法,该 call() 方法将作为线程执行体,并且有返回值。
      2. 创建 Callable 实现类的实例,使用 FutureTask 类来包装 Callable 对象,该 FutureTask 对象封装了该 Callable 对象的 call() 方法的返回值。
      3. 使用 FutureTask 对象作为 Thread 对象的 target 创建并启动新线程。
      4. 调用 FutureTask 对象的 get() 方法来获得子线程执行结束后的返回值。
    4. 狂神说方法img

  • 线程并发

    1. 多个线程对同一个对象(数据)进行操作
      TestThread5

    2. 存在数据访问安全问题img

  • 静态代理

  • Lamda表达式

    • 尽量少使用,难以维护
  • 线程状态及转换

    1. 状态

      1. 获取线程状态

        thread.getState();

    2. 停止线程

    img

    1. 线程休眠-sleep()

    img

    1. 线程礼让_yeild

      这仅仅是一种暗示,没有任何一种机制保证当前线程会将资源礼让。img

    2. 线程强制执行_join

      优先执行

    3. 优先级

      并不一定是优先级高,先跑优先级高的

      设置优先级应该优先于start

      基本概念img

  • 守护线程

    ​ 用户线程:我们平常创建的普通线程。

    ​ 守护线程:用来服务于用户线程;不需要上层逻辑介入。

    ​ 如果所有的用户线程都结束(不是RUN状态)了,那么守护线程就会被杀死。

    ​ 设置守护线程img

  • 线程调度

    1. 线程同步img

    2. 三个不安全的例子

      多个人抢票

      同一个账户取钱

      对同一个List不断增加数据

    3. 同步方法与同步块

      synchronized

      ​ 默认锁的是this

      ​ Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。

      死锁

      ​ 死锁产生的条件![image-20210129151828084](/Users/luonaer/Library/Application Support/typora-user-images/image-20210129151828084.png)

      死锁的例子

      ​ 此时产生死锁:img

      此时无锁img

      LOCK锁

      ​ Synchronized与Lock的对比img

      使用ReentrantLockimg

  • 生产者消费者

    • 生产者生产,消费者消费。二者可并发执行,之间可以进行通信。imgimg

    • 解决方法

      • 管程法img

      • 信号灯法

    • 线程池

      • 提高性能,避免频繁的创建和删除线程img

      • 使用方法img

      • 代码实现img

原文地址:https://www.cnblogs.com/baoweijie99/p/14345035.html