全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  java技术干货  >  详情

关于线程的知识,你知道多少?

来源:千锋教育
发布人:syq
2023-01-18

推荐

  一.场景

  小白同学:小千,我看线程这一块的内容时,关于线程和进程、并行和并发的概念总是有点迷糊,你能给我解答一下吗?

线程的知识

  没问题!这就给你安排。

  二.进程的概念

  1.官方概念

  官方解释:进程是程序运行资源分配的最小单位。

  进程是操作系统进行资源分配的最小单位,其中资源包括CPU、内存空间、磁盘 IO等。同一进程中的多条线程共享该进程中的全部系统资源,而进程和进程之间是相互独立的。进程是具有一定独立功能的、在某个数据集合上进行运行活动的程序,系统进行资源分配和调度的一个独立单位。

  2.通俗解释

  通俗地说,进程就是你启动了一个程序,就会启动一个进程。

  不信咱们可以查看一下任务管理器,直接上图给你证明一下:

1 (1)

  三. 线程的概念

  1.官方概念

  官方解释:线程是 CPU 调度的最小单位,必须依赖于进程而存在。

  线程是进程的一个实体,是 CPU 调度和分派的基本单位,它是比进程更小的、能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器、一组寄存器和栈),但它可以与同属一个进程的其他线程共享该进程所拥有的全部资源。

  2.通俗解释

  通俗地说,线程就是在一个时间点中,一个cpu运行一个线程。

2 (1)

  四.问题1

  你的电脑同时能够处理多少个线程呢?

3 (1)

  目前主流 CPU 都是多核的。增加核心数目就是为了增加线程处理数,因为操作系统是通过线程来执行任务的,一般情况下它们是 1:1 对应关系。也就是说2核CPU,一般可以同时处理2个线程。引入超线程技术后,可以做到4个逻辑处理器同时处理4个线程。

  五.问题2

  根据上面第4章节讲解的内容,假如一台电脑一次只能执行4个线程,但一个QQ就有75个线程 ,并且还有浏览器等其他软件也在同时运行,这是为什么呢?

  别急,慢慢听我说,其实这是涉及到了 CPU的时间片轮转机制。

  假如进程切换(process switch) - 也称为上下文切换(context switch),需要5毫秒;再假设时间片设为15毫秒,则在做完15毫秒有用的工作之后,CPU将花费5毫秒来进行进程切换。

  通俗地说,单个线程执行的时间很短,CPU来回切换的速度很快,看起来有多个软件在同时运行,其实只是CPU在多个软件之间进行了快速切换,欺骗了你的眼睛。所以当程序多了电脑就会卡,因为CPU在不同的线程之间来回切换需要反应时间。

4 (1)

  六. 并行和并发的概念

  1.并行

  并行:同一时间可执行的线程数量。

  比如,有如下四个车道,可以同时并行四辆车:

5 (1)

  再比如:大学餐厅有四个窗口,四人可以同时打饭(不要插队哈):

6 (1)

  或者你带女朋友买电影票的窗口,可以同时有四个人买票;或者火车站的8台取票机,可以同时支持8人取票。

  所以并行线程,更多的是指同时可以执行的线程数,一般和cpu挂钩。

  2.并发

  并发:单位时间内执行的线程数量 。

  比如:

  4条公路,1分钟内驶过了10辆车;

  4个打饭窗口,1分钟内卖给了20个学生饭;

  4个售票窗口,1分钟内卖出了100张票;

  你的电脑,1分钟内处理了50个线程。

  七. 多线程死锁问题

7 (1)

  上图说明:前面三个窗口有三对情侣排队中,最后一个是单身的小明,大家都在争抢情侣电影票,现在只剩下一套:

  这个电影票最后只能被一个窗口售卖,不可能出现一票两卖的情况,所以可能存在线程安全性问题。

  小明先人一步,在4号窗口买票时, 窗口小姐姐操作,把这张票锁定,其它窗口就不能卖这张票了。但小明不确定女朋友会不会来,所以一直在犹豫,其它三个窗口咬牙等待中。如果小明长时间锁定资源不放手,就会出现线程的死锁问题。

  小明迟迟不给答复,其它三个窗口一直在不停的尝试购票,看看能不能购票成功,尝试次数多了,机器和其他等待人员就会受不了。

  还有不知情的其他小伙伴,可能还会进行排队,大家都在不停地尝试,这就可能会造成大厅拥堵。也就是线程的资源会耗尽,造成死机。

  八. Java main方法是多线程的

  在Java代码中,我们常见的main方法其实就是多线程的。

8

  执行结果如下:

9 (1)

  九. 结语

  至此,小千就把线程相关的内容带大家复习一下,现在你对线程还有疑惑吗?

相关文章

java两个日期比较相差多少天

2023-06-27

javasubstring截取字符串的用法?

2023-06-25

find命令查找文件

2023-06-16

如何添加Java环境变量

2023-06-08

随机函数rand怎么使用

2023-04-20

什么是单体架构?单体架构有什么优缺点

2023-04-11
在线咨询 免费试学 教程领取