多线程

本文介绍了多线程的概念,包括线程与进程的区别,多线程的创建与启动方式,线程的几种状态,线程调度的方法如优先级、休眠、礼让和中断,并探讨了线程同步问题及线程安全类型,例如StringBuffer、StringBuilder、HashMap、Hashtable、ArrayList和Vector在多线程环境下的使用注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

*多线程
1.理解线程的概念
在这里插入图片描述
线程:是CPU中运算和分配的基本单位,也是进程中运算的基本单位,一个进程中可以有多个线程。
进程:一个程序的运行实例,正在进行的程序,通常来说一个程序对应着一个进程,它有独立的内存空间和系统资源。
多线程和单线程
单线程:如果一个程序中只有一个线程,则称为单线程。
多线程和单线程的区别:
1.多线程在执行时并不一定有单线程执行快。
2.多线程产生的根本原因也是它的最根本的优势在于我们能够在一个程序中,同时干多件事,可以充分利用CPU资源。
3.多线程有两个概念:一种是指单核CPU多线程,一种是指多核CPU的多线程。
单核CPU:同时只能执行一个线程,但是同样可以实现多线程,这个多线程是“抢占式\交替”执行的。
多核CPU:可以进行交替执行,也可以实现真正物理上的并行执行。
最经典案例:迅雷

主线程:
在这里插入图片描述
一个进程有且仅有一个主线程,主线程是负责程序的开启和程序最后关闭动作的线程。
java.long.thread类
在这里插入图片描述
2.掌握线程的基本创建和启动
在这里插入图片描述
线程的第一种创建方式
1.继承Thread类
2.重写run()方法
3.调用start()启动线程
线程的第二种创建方式
在这里插入图片描述
因为java是单继承,所以如果你继承了Thread类,那么未来此类将无法在继承其他的父类。
1.实现Runnable接口
2.重写run()方法
3.创建线程对象组装Runnble接口的方式
在这里插入图片描述
线程启动为何使用start
Start()和run()的区别?
在这里插入图片描述
如果是调用run()方法,它只是一个普通方法,届时将只有主线程在执行此方法而已。(和以前的其他方法调用效果无区别)
如果是调用该start()方法,它会新开启一个线程,然后此线程将会和其他线程交替执行某些任务,此线程执行的内容就是run()方法内的任务。

3.了解线程的几种状态
在这里插入图片描述
创建状态:当new Thread()时,线程处于创建状态。
就绪状态:当调用start()之后,线程处于就绪状态。
运行状态:当线程被分配到了CPU资源,线程处于运行状态,如果线程运行状态时,是处于抢占式执行的,当没抢到时又回到就绪状态。
死亡状态:当线程执行完任务,或者被外部干涉结束,线程会进入死亡状态。
阻塞状态:当用户在输入/线程在休眠时,线程会进入阻塞状态,当阻塞状态结束后会进入就绪状态。

4.掌握线程调度的常用方法****
线程优先级
在这里插入图片描述
线程休眠
在这里插入图片描述
在这里插入图片描述
线程礼让
在这里插入图片描述
线程强制执行
在这里插入图片描述
线程中断…

5.掌握线程的同步问题(线程安全)
同时有多个线程在执行任务,虽然它们是交替执行,但是速度切换很快,如果有一些资源被共享,可能导致资源出错。

线程并发
同一个资源被多个线程共享,可以通过“加锁”来解决安全问题。
在这里插入图片描述
6.常见的线程安全类型

StringBuffer 和 StringBuilder。
在这里插入图片描述
它们在使用中没有区别,但是StringBuffer是线程安全的

,而StringBuilder非线程安全,效果较高。

HashMap和Hashtable

Hashtable是线程安全的。

ArrayList和Vector

Vector是线程安全的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值