多线程和单线程

很多朋友应该都听过或者用过多线程,却不太清楚,我也迷糊过,后来慢慢想清楚了,所以帮助大家更好的理解一下。

众所周知,一个进程就是一个程序(微信,音乐,浏览器),由一到多个线程组成(多人同时浏览一个网页)。java的多线程有两个最基本的使用方法,继承Thread类和实现Runable接口。还有一些线程的状态,生命周期以及控制线程状态的方法等知识。

其中有一个概念是,线程是cpu调度和分配的基本单位,以一种抢占时间片的状态来执行。而处理器cpu同一时间只能运行一个线程。

到了这,就容易犯迷糊了,我也迷糊过,既然它只能运行一个,为什么还要用多线程,如果只是运行一个简单的函数,抢时间片图啥嘛,让它单线程一路走完不就好了。其实没有错,只运行一个简单的函数,是没必要用多线程的,使用了反而会浪费时间。

关键在于,一个程序的运行,它不止是一个简单函数啊。。。拿手机来说,我们可以听着歌聊天,就是多线程的体现了;如果不用多线程,那就只能聊天或者只能听歌。看网页,你在看的时候,别人不能看,甚至,你只能看,不能点击也不能滑动。。。

多线程其实是假象,它还是在一个一个线程的去执行,因为cpu运行和切换线程的速度非常快,我们感觉不到。就像太阳光有七种颜色,还有紫外线红外线的,我们看到的只是光,亮亮的,啥颜色没有。。

还不太了解的话,再做个比喻,人的大脑是单核单线程处理器,一次也只能处理一个事情。一心不能两用吗?可以试一下,你能一手画圆一手画方吗?不能。。。

还有看书和扣脚丫它不是同时进行的,在看书的时候,手是停止的,大脑发一个指令,速度很快,自己也感觉不到,手就去扣脚丫了。但大脑的注意力在那一瞬间已经从看书的状态下停下了,你没在看书,而去抠脚丫了。只是速度很快了后,你扣一下就看几个字,然后又扣一下再看几个字,别人看起来就像看书和扣脚丫同时进行了。

包括我们在上课时,脑子里胡思乱想是可以的,想和知识有关的还会促进学习,但不能想太多没用的,也不能想太长,不然就会严重影响学习的效率。

再返回程序上来看,单线程是肯定不行的,不能满足我们的需求,那简直不能用啊,所以必须有多线程,但多线程乱用就可能变慢,变卡【大家应该都听过几核几线程的cpu,这是真正多线程,可远远不够,还得有很多伪多线程来帮忙】。

这也算是一个写程序时,很少主动写多线程代码的原因,我们用的框架和技术啊,一般都偷偷的做了【框架只针对大多数,也有些特殊的业务需求,需要手动创建新的线程来提高效率,比如上传/下载多个文件,cpu闲着也是闲着,不用白不用】。

end,没啥具体的,有些地方可能还不正确,只是希望能帮助大家理解!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200316A0V4S300?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券