文章目录
- 🐒个人主页
- 🏅JavaSE系列专栏
- 📖前言:
- 🪅什么是程序 、进程、线程?
- 🪅线程的生命周期
- 🪅多线程
- 🪅守护者线程
- 🪅线程并行与并发
- 🪅死锁
- 🪅线程异步与线程同步
🐒个人主页
🏅JavaSE系列专栏
📖前言:
本篇博客主要以介绍关于以线程为核心的知识点导读
拓展知识:操作系统的四大特征
🪅什么是程序 、进程、线程?
【程序】:为完成特定任务,用某种语言编写的一组指令集合。
||ヽ(* ̄▽ ̄*)ノミ|Ю 其实就是一段静态的(没有运行的)代码~
【关于进程概念】:你就理解为应用程序在内存中运行着的任务就行了。(从操作系统的角度上讲:进程是操作系统进行内存资源分配的最小单位)
||ヽ(* ̄▽ ̄*)ノミ|Ю 其实就是一段动态的运行代码~,在内存中操作系统为其创建PCB(进程控制器),使其成为进程实体
【关于线程概念】:就是把内存里的任务进程在细化为一个一个的小任务供CPU处理器执行。(线程是进程最小的执行单位,是操作系统的CPU处理器进行任务调度的最小单位,)
||ヽ(* ̄▽ ̄*)ノミ|Ю 其实就是由于进程任务太大了,进程任务再进行细化为线程任务来上cpu执行~
🪅线程的生命周期
🪅多线程
【概念
】:一个程序内部,可以同时执行多个线程任务,这些任务都是独立的。
【优点
】:提高程序响应速度,提高CPU利用率,改善程序结构,将一些复杂的任务分为多个线程,独立运行。
【缺点】:由于是多个任务占用内存空间,所以要求CPU(硬件)的性能要高
🪅守护者线程
【概念】:顾名思义,就是这个线程它需要守护身边的线程,帮助这些线程应对突发情况,处理这些线程留下的缓存垃圾。
【例子:Java的JVM虚拟机中有一个垃圾回收机制,这里就用到了守护线程来清理用户线程留下的内存垃圾
】
如果将一个线程设置为守护线程,只有当其他用户级线程都结束后,守护者线程自动结束,(必须在启动线程之前设置
)
new Thread().setDaemon(true);//设置为守护线程
🪅线程并行与并发
(在此链接处有相关介绍)
拓展知识:操作系统的四大特征
🍔并发概念: 指两个或多个事件同一时间间隔发生。宏观上感觉是同时发生的,但微观上是交替发生、依次发生的。
‘买票,抢购,秒杀看似同时进行,但是他们都得有一个先来后到的关系’
常考易混淆概念·——·——并行
🎇并行概念:指两个或多个事件在同一时刻同时发生。
🪅死锁
是指有多个线程(>=2)会因为相互把持住对方所需要的资源而不放手,并且一直请求对方释放自己所需要的资源,而形成的一种僵持局面。
【就像堵车一样,谁都不愿意让开地方先让对方通过,从而陷入了僵持
】
🪅线程异步与线程同步
【线程异步】:就是线程会以一种不可预知的速度向前推进(其实就是代码执行可能不是一口气先把一个进程执行完,只执行了部分,就直接执行其他进程了
),这可能会引发死锁问题
。
【线程同步】:是为了解决‘’异步可能形成死锁问题‘’引入的,
是指多个线程之间进行数据交换时,需要保证数据的正确性和一致性。在多线程环境下,如果没有同步机制,就会出现数据竞争、死锁等问题。(其实就像你与其他人去抢购最后一张电影票,必须规定一个顺序,肯定有人抢不到票,我们给排了一个顺序,就是“排队”+“锁”
)、(就像堵车,交警来了,给你规定了一个顺序,才把道路疏通了
)
常见的线程同步方法有:
synchronized关键字:Java中的synchronized关键字可以用于修饰方法或代码块,实现对临界区的互斥访问。
Lock类:Java中的Lock类提供了比synchronized更细粒度的锁机制,可以更加灵活地控制线程的并发访问。
volatile关键字:Java中的volatile关键字可以保证多个线程之间的可见性,即一个线程修改了变量的值,其他线程能够及时看到这个变化。