java实现多线程的两种方式(Java多线程专题之线程与进程概述)
java实现多线程的两种方式(Java多线程专题之线程与进程概述)
2024-07-03 02:50:27  作者:爱在那里  网址:https://m.xinb2b.cn/tech/fhi199588.html

大家好,一直以来我都本着用最通俗的话理解核心的知识点, 我认为所有的难点都离不开 「基础知识」 的铺垫目前正在出一个Java多线程专题长期系列教程,从入门到进阶, 篇幅会较多, 喜欢的话,给个关注❤️ ~,今天小编就来说说关于java实现多线程的两种方式?下面更多详细答案一起来看看吧!

java实现多线程的两种方式(Java多线程专题之线程与进程概述)

java实现多线程的两种方式

Java多线程专题之线程与进程概述前言

大家好,一直以来我都本着用最通俗的话理解核心的知识点, 我认为所有的难点都离不开 「基础知识」 的铺垫。目前正在出一个Java多线程专题长期系列教程,从入门到进阶, 篇幅会较多, 喜欢的话,给个关注❤️ ~

适合人群有一定的Java基础想学习或了解多线程开发想提高自己的同学

「大佬可以绕过 ~」

背景

之前给大家讲了一些框架的使用,这些都属于业务层面的东西,你需要熟练掌握它并在项目中会运用它即可,但这些对自身技术的积累是远远不够的,如果你想要提高自己,对于语言本身你需要花更多的时间去挖掘而不是局限于框架的使用,所以之前为什么跟大家一直强调基础的重要性,框架可以千变万化,层出不穷,但是基础它是不变的,不管是学java还是前端或者是其它语言, 这一点大家还是需要认清的。

接下来的几期会专门讲多线程这一块,篇幅会较多,耐心看完你一定会有收获~

情景回顾

之前有给大家讲过Java的基础和进阶部分,如果这方面还薄弱的同学,可以到底部查看往期教程。那时本来想把多线程也出一些教程,但是可能对于大家会有点难度,特别是刚入门的同学,而且这方面的知识又比较多。或许平时项目开发,只是用用框架或者直接使用框架提供的一些多线程方法,很少会自己手写,即便这样,还是需要深入学习的,因为面试的时候,这个地方几乎是必问的,而且对于自身的提高还是有帮助的。

今天我们不涉及代码部分,先带着大家过一遍理论,一起来看一下什么是线程和进程 ~

什么是进程

在讲之前,先给大家讲一下,在早期,计算机是如何工作的。

在很早以前,计算机都是通过一个个指令去工作的,用户输入一个指令,计算机完成一个操作,这种效率是很低的。因为输入一个指令,计算机就等待。后来人们引入了批量处理,将一系列指令交给计算机处理,但是这个过程仍然是串行的,内部执行还是会阻塞。随着时间的发展,人们对于计算机的性能要求越来越高,因为时间就是金钱,如果能提高效率,老板当然高兴了~

后来,人们就提出了计算机进程的概念, 我们先看一下百科中是如何描述进程的:

进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体

这里,仍然不给大家提线程的概念,我们接着看进程。我们从中可以得到一个核心点,它是计算机系统资源分配和调度的基本单位。那么它又是怎么去分配和调度的呢?

上下文切换

当程序通过某种手段(编程语言编写)被编译为一系列指令和数据集合后,此时,CPU采用时间片轮转的方式运行进程。CPU为每个进程分配一个时间段,称作它的时间片。如果在时间片结束时进程还在运行,则暂停这个进程的运行,并且CPU分配给另一个进程(这个过程叫做上下文切换)。如果进程在时间片结束前阻塞或结束,则CPU立即进行切换,不用等待时间片用完。

当进程暂停时,它会保存当前进程的状态(进程标识,进程使用的资源等),在下一次切换回来时根据之前保存的状态进行恢复,接着继续执行。

使用进程CPU时间片轮转方式,在宏观上看起来同一时间段执行多个任务,但在事实上,对于单核CPU来说,任意具体时刻都只有一个任务在占用CPU资源。

随着时间的推移,人们觉得这种方式还是有点效率低,不能够满足日常需求了。下面就是我们要讲的线程的概念了

什么是线程

我们知道进程在某一时刻只能处理一件事情,如果要处理其它的,只能等待前面的任务完成。于是呢,人们就提出了线程的概念。之前讲进程的概念的时候,其实还有一句话:

在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体

从中可知,线程是存于进程之中,一个进程可以有多个线程,一个线程可以处理一个子任务,它是并发程序的基础。有的人可能问了,我多进程处理不也可以吗?使用多线程有什么优势?

首先我们需要知道的是处理一个程序不单单是执行任务,完了就结束了,往往我们的执行的任务之间是互相依赖的,也就是说任务之间需要交互,在这里叫进程通信或者线程通信。下面我们就说说这两者的比较

进程通信 & 线程通信

首先我们要知道进程和线程的本质区别,线程是进程的子集,一个进程可以有多个线程。从运行环境上可以得知,进程是独立的运行环境, 线程是进程下分配的一个子任务,也就是说进程独占系统资源和内存空间。这样一想,如果开启多个进程是比较消耗系统资源的。进程的创建和销毁不仅需要保存寄存器和栈信息,还需要资源的分配回收以及调度,开销较大。线程只需要保存寄存器和栈信息,开销较小,所以这也是使用线程的优势。

进程与进程之间是互相隔离的,一个进程出现问题不会影响其它进程的运行,而线程崩溃是有可能影响整个程序的。另外一个重要区别是,进程是操作系统进行资源分配的基本单位,而线程是操作系统进行调度的基本单位,即CPU分配时间的单位。

上下文切换过程

这个概念非常重要,大家一定要好好去理解~

寄存器

上面提到寄存器,那么它是啥呢?它和上下文切换脱不开关系。上下文切换是指 CPU 从一个进程(或线程)切换到另一个进程(或线程)。上下文是指某一时间点CPU寄存器和程序计数器的内容

寄存器是cpu内部的少量的速度很快的闪存,通常存储和访问计算过程的中间值提高计算机程序的运行速度。

程序计数器

程序计数器是一个专用的寄存器,用于表明指令序列中CPU,正在执行的位置,存的值为正在执行的指令的位置或者下一个将要被执行的指令的位置,具体实现依赖于特定的系统。

说的有点抽象,给大家举个例子。这里开启了两个线程A,B。那么线程A怎么切到B的呢?

首先A线程挂起, 并将当前在cpu中的状态保存到内存中在内存中检索下一个线程B的上下文并将其在CPU的寄存器中恢复,执行B线程当B执行完,根据程序计数器中指向的位置恢复线程A过程分析

CPU通过为每个线程分配CPU时间片来实现多线程机制,CPU通过时间片分配算法来循环执行任务,当前任务执行一个时间片后会切换到下一个任务。但是,在切换前会保存上一个任务的状态,以便下次切换回这个任务时,可以再加载这个任务的状态,所以任务从保存到再加载的过程就是一次上下文切换。

⭐️上下文切换通常是计算密集型的,意味着此操作会消耗大量的CPU时间, 如果你面试被问到Redis为什么采用单线程I/O多路复用模型,这个地方是不是可以拿出来讲一讲呢?

结束语

本期到这里就结束了, 总结一下,本节主要讲了什么是线程,什么是进程,以及上下文切换的概念。这些概念性的东西,大家不要去背,要自己去理解,不懂的地方可以自己再去搜索,一定要理解,然后自己多总结总结~

下期预告

下期就带大家正式进入Java多线程讲解。关注公众号加群,一起学习进步。关注我,不迷路, 下期不见不散 ~

更文时间工作日(周一 周五)周末不更 ☀️节假日不定时更往期内容我的博客(阅读体验较佳)写给初学者的Java基础教程一文带你快速学习Java集合类花几分钟快速了解一下泛型与枚举Java注解与反射入门到进阶JavaIO教程从入门到进阶项目源码(源码已更新 欢迎star⭐️)java-thread-all地址: https://github.com/qiuChengleiy/java-thread-all.git推荐 SpringBoot & SpringCloud (源码已更新 欢迎star⭐️)springboot-all地址: https://github.com/qiuChengleiy/springboot-all.gitSpringBoot系列教程合集一起来学SpringCloud合集,
  • 太行之脊新亮剑派来二当家(太行之脊圆满杀青)
  • 2024-07-03太行之脊圆满杀青由著名导演张玉中执导,广东省委宣传部、深圳市委宣传部、广东广播电视台、深圳广电集团、深圳卫视、中视线传媒集团、广东广视传媒、磨铁娱乐集团、广东卫视文化传播等联合出品的重大革命历史题材电视连续剧《太行之。
  • 笑脸壁纸ins高级质感(弥勒佛笑脸潮牌壁纸)
  • 2024-07-03弥勒佛笑脸潮牌壁纸从中国流传到日本的弥勒佛,在日本,日本人以布袋和尚为七福神之一布袋神表示姻缘吉祥而EVISU就是以七福神为设计元素的日本高端潮流品牌,享誉世界潮流尖端,而作为有着上下五千年历史的中国却很少以中国传统元。
  • 鲁迅的朝花夕拾都写了什么(鲁迅的朝花夕拾都写了什么)
  • 2024-07-03鲁迅的朝花夕拾都写了什么《朝花夕拾》是鲁迅的回忆性文集它是一本家喻户晓的文集,是一本必读的文集,是一本如良师益友的文集这本书是鲁迅回忆童年、少年和青年时期中不同生活经历和体验的文字全书由《小引》《狗·猫·鼠》《阿长与〈山海经。
  • 李沁白色连衣裙穿搭(李沁白色针织上衣配蕾丝镂空半身裙)
  • 2024-07-03李沁白色针织上衣配蕾丝镂空半身裙李沁,中国知名女演员,出生于1990年9月27日,籍贯山东济南她毕业于北京舞蹈学院芭蕾舞系,并在2010年开始了她的演艺生涯李沁以其优秀的表演技巧和出色的演绎能力而受到广大观众的喜爱和赞赏李沁出生于一。
  • 广州十大老街排名(广州十大历史老街)
  • 2024-07-03广州十大历史老街广州这个城市除了高楼大厦还有一些历史老街,承载了很多老广州人的回忆一些古建筑和一些老字号美食店面以及广州特色小吃美食非常有特色,充满着历史韵味,下面为大家介绍一下广州十大历史老街,一起来看看广州十大历。
  • 宜昌金狮洞旅游攻略(十一探秘夷陵区金狮洞)
  • 2024-07-03十一探秘夷陵区金狮洞十一假期,不能远行,到夷陵区,玩金狮洞,临香溪口,靠南津关遥想过去,航道曲折,怪石林立,滩多水急,行舟惊险,建葛洲坝,水势平缓,绮丽景观,更添神韵未进景区,天然奇石,唐僧师徒,浮想联翩当地传说,洞景奇。
  • 只要你对我好我会好好珍惜你(只要你在我会永远珍惜)
  • 2024-07-03只要你在我会永远珍惜守候在时光的渡口,等待着与你风雨同舟我要用心为你撑起一片蓝天,驱散阴霾,让你成为最美丽的花朵,永远在我心中绽放爱相随,情相伴我们扬帆起航,乘风波浪畅游大千世界我愿意为了你而去改变自己,把我们的恋爱变得。
  • 因水害停运列车(成渝铁路发生水害)
  • 2024-07-03成渝铁路发生水害新华社成都6月30日电(记者谢佼)记者6月30日从中国铁路成都局集团有限公司获悉,受四川省境内持续强降雨影响,成渝铁路顺河场至登瀛崖区间发生水害,导致途经该区段的部分旅客列车停运或缩短运行区段为确保列。
  • 一丈长度是多少
  • 2024-07-03一丈长度是多少一丈长度是:一丈=3.33米(现代)尺、寸、丈、厘米都是长度单位,换算关系如下:1丈=10尺、1尺=10寸、1寸=10分、1分=10厘1丈≈3.33米≈33.3分米≈333厘米1尺≈0.333米≈3.。
  • 十二星12星座喜欢什么(知道吗)
  • 2024-07-03知道吗白羊座讨厌味道寡淡的东西,喜欢辛辣食物,习惯加入罗勒、肉桂、咖喱粉等各种调味品,味道棒棒哒金牛座喜欢甜食,药属葵、肉桂、肉豆蔻均深得他们的喜爱;他们喜欢美味的食品,钟情于欧芹、薄荷口味的菜肴,不能忍受。
  • 晁盖的绰号及评价(晁盖的绰号为啥叫)
  • 2024-07-03晁盖的绰号为啥叫文|方圆读过《水浒传》的人都知道,里面的英雄好汉基本上都会有个绰号,这似乎已经成为他们个性的专属标签,根据不同人的性格和体貌特征,其绰号都独具特色就比如说“宋江”,他的绰号是“及时雨”,什么意思呢?是。
  • 带鹰字的古诗(每日好诗鹰)
  • 2024-07-03每日好诗鹰关注中国诗歌网,让诗歌点亮生活!征集帖☞☞《鹰》下期征集☞☞300元稿酬征集评论|《父亲》鹰沙马鹰的召唤来自孤寂而尖锐的悬崖危险之美是险峰的姿态每一块岩石里都流淌着太阳的血都留下闪电的伤痕,都有着秘而。