Java当中的多线程(知识点详解)

本文详细介绍了Java多线程的基础概念、创建与使用、线程生命周期、同步机制、线程通信,以及JDK5.0后的新线程创建方式。通过实例演示和对比,探讨了如何解决线程安全问题和优化线程调度。

一、基本概念:程序、进程、线程

①基本概念

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

②使用多线程的优点

  背景:以单核CPU为例,只使用单个线程先后完成多个任务(调用多个方法),肯定比用多个线程来完成用的时间更短,为何仍需多线程呢?

多线程程序的优点:

  1. 提高应用程序的响应。对图形化界面更有意义,可增强用户体验。
  2. 提高计算机系统CPU的利用率
  3. 改善程序结构。将既长又复杂的进程分为多个线程,独立运行,利于理解和
    修改

③何时需要多线程

  • 程序需要同时执行两个或多个任务。
  • 程序需要实现一些需要等待的任务时,如用户输入、文件读写操作、网络操作、搜索等。
  • 需要一些后台运行的程序时。

二、线程的创建和使用

①线程的创建和启动

  • Java语言的JVM允许程序运行多个线程,它通过java.lang.Thread
    类来体现。
  • Thread类的特性
    –>每个线程都是通过某个特定Thread对象的run()方法来完成操作的,经常
    把run()方法的主体称为线程体。
    –>通过该Thread对象的start()方法来启动这个线程,而非直接调用run()

②Thread类

  • 构造器
    –>Thread():创建新的Thread对象
    –>Thread(String threadname):创建线程并指定线程实例名
    –>Thread(Runnable target):指定创建线程的目标对象,它实现了Runnable接口中的run方法
    –>Thread(Runnable target, String name):创建新的Thread对象

③API中创建线程的两种方式

在这里插入图片描述
在这里插入图片描述

④mt子线程的创建和启动过程

在这里插入图片描述
在这里插入图片描述
注意点:

  1. 如果自己手动调用run()方法,那么就只是普通方法,没有启动多线程模式。
  2. run()方法由JVM调用,什么时候调用,执行的过程控制都有操作系统的CPU
    调度决定。
  3. 想要启动多线程,必须调用start方法。
  4. 一个线程对象只能调用一次start()方法启动,如果重复调用了,则将抛出以上
    的异常“IllegalThreadStateException”。

⑤继承方式和实现方式的联系与区别

public class Thread extends Object implements Runnable
区别:
  -->继承Thread:线程代码存放Thread子类run方法中。
  -->实现Runnable:线程代码存在接口的子类的run方法。
实现方式的好处:
  -->避免了单继承的局限性
  -->多个线程可以共享同一个接口实现类的对象,非常适合多个相同线程来处理同一份资源。

⑥Thread类的有关方法

在这里插入图片描述
在这里插入图片描述

⑦线程调度

在这里插入图片描述

⑧线程的优先级

在这里插入图片描述

⑨补充:线程的分类

在这里插入图片描述

三、线程的生命周期

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、线程的同步

①问题的提出

  -->多个线程执行的不确定性引起执行结果的不稳定
  -->多个线程对账本的共享,会造成操作的不完整性,会破坏数据。
在这里插入图片描述

②例题:模拟火车站售票程序,开启三个窗口售票。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

③Synchronized的使用方法

在这里插入图片描述

④分析同步原理

在这里插入图片描述

⑤同步机制中的锁

在这里插入图片描述

⑥同步的范围

在这里插入图片描述

⑦释放锁的操作

在这里插入图片描述

⑧不会释放锁的操作

在这里插入图片描述

⑨单例设计模式之懒汉式(线程安全)

在这里插入图片描述

⑩线程的死锁问题

在这里插入图片描述

⑩①Lock(锁)

在这里插入图片描述
在这里插入图片描述

⑩②synchronized 与 Lock 的对比

在这里插入图片描述

五、线程的通信

①线程通信

在这里插入图片描述

②wait() 方法

在这里插入图片描述

③notify()/notifyAll()

在这里插入图片描述

④经典例题:生产者/消费者问题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

⑤练习

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

六、JDK5.0新增线程创建方式

①新增方式一:实现Callable接口

在这里插入图片描述
在这里插入图片描述

②新增方式二:使用线程池

在这里插入图片描述

③线程池相关API

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

faramita_of_mine

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值