对Java多线程的理解

对Java多线程的理解

在这里插入图片描述

什么是多线程(MultiThreading)?首先,让我们看一下官方解释:“多线程(multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。”啥是线程?并发又是什么?这些名词比较抽象。要搞懂多线程,我们就要先搞懂什么是程序,进程和线程。

程序(Program) 是什么?

我们都知道,一个系统,一个软件甚至一个功能,都是靠编译好的程序来实现的。但“程序”这个概念该如何来定义呢?程序就是程序猿的命“程序”是一个静态的概念,它是一组以特殊语法编写的(母语为英语),可以被计算机所识别和执行的指令。一组完善的程序需要经过程序员按照特定的语法(比如Python,Java)进行编辑和连接,然后在计算机中转换成计算机的数字指令并运行,从而得到我们想要的结果。
要注意的是,程序是一个静态的东西,换句话说程序是不会自己跑自己的,它只是承载着一些实现特定功能的指令序列,并不能自发地去运行和工作。看到这里可能有人会迷糊了,那程序不能运行和工作,那手机应用和电脑游戏是怎么运行的呢?其实,这里我们就要介绍到另一个概念:进程。

进程(Process)是什么?

进程就是程序的执行过程。再抽象一点,进程是正在运行的程序的实例。举一个具体的栗子🌰:大家都玩过电子游戏吧,不管是斗地主,还是LOL,它都是一个游戏,也就是一个程序。你下载安装包,更新版本时就是在下载程序。当你不玩这个游戏时,这个程序是一个静止的状态,它是不会自己运行的(不要抬代练的杠)。但当你打开这个游戏时,这个游戏就被启动了,它就变成了一个在你的计算机中运行的——进程。
进程是操作系统动态执行的基本单元。在操作系统中运行一个程序需要进行很多活动,这些活动都是以进程为单位的。还是以斗地主为例,计算机需要给斗地主这个进程分配运行的内存空间,并且管理这个游戏的运行。冤有头债有主,进程就是程序执行时的管理单位。进程是动态的,当程序需要运行时产生,随着程序运行结束而动态消亡。进程的概念,有助于我们更加清晰的刻画系统运行的的内在规律,并且可以有效管理和调度进入运行的程序。说了这么多,但进程只是运行活动的执行过程,真正实现程序中的具体功能的,是进程中所控制的实际运作单位:线程。

什么是线程(Threads)**?

线程是CPU的基本执行单元。在一个运行的进程中,包括了很多个线程,每一个线程都是一个能够独立执行任务的实体。在同一个进程中的所有线程,是共享该进程的资源的。这些线程共用其进程的内存、文件和地址空间,这使得线程之间的通信无需调用内核。此外,线程还具有两个很重要的特性:并发和并行。

并发(concurrency)和并行(parallellism)是两个不同的概念。并发是指在同一时间段内,并且在同一实体上发生的事件。并行是指在同一时刻内,在一个或多个实体上发生的事件。再举个栗子🌰,你在教室里上高数课,在课上你听老师的内容,下课后你把课上内容整理了笔记,那么听课和记笔记就是并发执行;但是,如果你是在上课的过程中边听课边记笔记,那么听课和记笔记就是并行执行。通俗点讲,并行是指你同时在做几件事,吃饭喝水看美剧;而并发是指你一段时间里做了几件事,出了门打了车买了东西逛了街。搞清楚并发和并行的区别,是理解多线程思想的关键。

电脑中的活动管理器就是一个多线程的例子
这是电脑中活动监视器的界面,上面显示了计算机当前的进程状态。其中,活动监视器、微信和有道云笔记都是正在运行的进程,这些进程是同时在运行的。右下方的进程和线程数是系统目前并发运行的进程和线程数。为什么是并发而不是并行呢?很显然,普通计算机是无法同时并行运行五百多个进程的……进程的并行性和并发性可以充分利用计算机每一个处理器,使计算机达到最佳性能。

讲到这里,我们应该能够理解多线程的含义了。多线程实际上就是一种并发的执行机制。在一个进程中划分出多个线程,把这些线程交给一个或多个处理器去运行,从而提高了系统资源的使用效率,使得多项任务可以同步进行。
比如说,在程序中运行一个耗时较长的递归算法,如果在单线程的情况下,系统只有将递归运行结束后才可以执行其他操作;但我们将该程序设置为多线程机制后,系统就可以将该算法作为一个独立的线程来运算,而不会影响其他功能和代码的运行。当然了,使用多线程结构时也需要考虑到线程数量过多时切换线程频繁以及占用内存过多的情况,以及线程死锁和bug的问题。

关于多线程的概念就介绍到这吧,我会另起一篇文章来讨论多线程的代码实现,用多线程的方式来实现一个Java游戏。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值