导图社区 java多线程
java多线程知识点总结,这张思维导图讲所有涉及到的内容做了整理,无论是预习还是复习都可以用。
社区模板帮助中心,点此进入>>
互联网9大思维
组织架构-单商户商城webAPP 思维导图。
域控上线
python思维导图
css
CSS
计算机操作系统思维导图
计算机组成原理
IMX6UL(A7)
考试学情分析系统
java多线程
线程的并发与协作
线程并发与协作常用模型:生产者/消费者模型
子主题
屏幕录制2022-09-01 21.59.39
线程的同步
我们都知道对于一个进程,有多个线程,对于一个进程的多个线程,空间都是共享的,那么对于成员变量的使用及其危险️,因为线程都是并行的,都是同时运行的。于是就出现了线程同步。当我们访问同一个共享数据,我们一个一个线程访问,其他的线程处于等待池队列,处于阻塞状态。当前一个线程使用完,下一个的线程使用
对于多个线程要访问一个共享数据时,我们需要线程同步,那么这个共享的数据我们称为对象锁,也就是我们要对那个数据对象要实现线程同步。
对象锁
this对象
屏幕录制2022-08-31 23.26.49
字符串
对于所有线程都互斥
屏幕录制2022-08-31 23.22.48
Class对象
屏幕录制2022-08-31 23.29.44
自定义对象
屏幕录制2022-08-31 23.34.00
守护线程
线程我们分为用户线程和守护线程,用户线程是我们自定义的线程,而守护线程是伴随着用户线程而出现的。用户线程结束了,守护线程也会结束。那怎么创建守护线程呢。我们只需要把我们创建的用户线程(不是主线程哈),通设置setDaemon(true),一般情况为setDaemon(false)
截屏2022-08-31 22.57.45
线程的联合
线程的联合,就是在一个线程的里加入另一个线程,线程的执行特点有点像方法的调用。比如A线程里加入了B线程,会b线程执行完后,才执行A后面的代码,实现了线程同步的效果
线程的常用方法
获取线程的名字
对于继承了Thread的类,我们可以使用this.getName()获取线程名字
对于没有继承的Thread的类,我们使用Thread.currentThread().getName()获取当前的线程
设置当前线程的名字
对于继承了Thread的类,我们可以通过构造方法 ,通过参数传到Thread中,例如public setName(String name){ super(name)}
第二种我们可以通setName()设置线程的名字,setName()必须要在线程的start()之前使用
判断当前线程是否存活
存活:是指从start()到死亡之间都处于存活状态,使用boolean isAlive()
线程优先级
每一个线程都有优先级,没有设置默认是5,优先级的范围是1-10,数字越高,优先级越高,但是不是优先级越高就先执行,而是被执行的概率大 int getPriority() void setPriority(int newPriority)
获取当前线程对象
对于继承了Thread的类可以使用this,没有继承thread的类使用Thread.currentThread()
暂停线程
使用sleep()
截屏2022-08-31 22.11.20
使用yield()
截屏2022-08-31 22.13.27
终止线程
线程的可以使用stop/destory(),但是被jdk弃用了
我们通常会使用flag 的boolean变量来标记,但达到某一时刻就结束生命
线程的生命周期
新生状态
当我们创建了一个线程时,线程就处于新生状态
就绪状态
当我们调用start()方法,线程进入等待队列,处于就绪状态的线程并没有运行
阻塞解除
调用了yield()方法,yield方法让处于运行的线程变为阻塞状态,但是此方法并不是一定会成功执行。
jvm将cpu资源分给其他的线程
运行状态
调用run()方法,这个方法会自动调用
阻塞状态
使用sleep方法
使用wait方法,中断同步
某个操作引发的阻塞,比如,IO的read/write
使用join,线程联合
死亡状态
正常执行完成
强制退出
线程的执行特点
线程的执行过程是并行的,什么是并行,就是多个线程同时进行运行。每一个线程的执行时间是由内置线程调度器决定的。
创建线程的方法
继承Thread类,需要重写public void run()方法
截屏2022-08-29 22.19.43
实现Runnable接口,实现里面的public void run()方法,需要注意的实现了Runnable接口的类还是一个普通类,不是一个Thread类。
截屏2022-08-29 22.21.31
截屏2022-08-29 22.22.39
主线程与子线程
主线程
每一个程序运行时,main方法对应的线程会第一执行,main方法对应的线程称为主线程,主线程可以产生其他的子线程
子线程
除了主线程的其他的线程称为子线程,是在主线程中产生的
进程与线程区别
进程
执行中的程序叫做进程,进程它是在内存中一块独立的程序空间。每一个进程都具有三个东西:cpu,数据,代码。每一个程序都至少会有一个进程,多个进程在运行的时候,多任务操作系统会把cpu时间动态的分给每一个进程,操作系统同时执行多个进程,每个进程独立运行
线程
一个进程可以产生多个线程,同一个进程的多个线程可以共享资源(代码,数据),称为轻量级进程。
多线程的概念
一种资源被交替占用的执行过程,称为多线程处理