很多朋友应该都听过或者用过多线程,却不太清楚,我也迷糊过,后来慢慢想清楚了,所以帮助大家更好的理解一下。
众所周知,一个进程就是一个程序(微信,音乐,浏览器),由一到多个线程组成(多人同时浏览一个网页)。java的多线程有两个最基本的使用方法,继承Thread类和实现Runable接口。还有一些线程的状态,生命周期以及控制线程状态的方法等知识。
其中有一个概念是,线程是cpu调度和分配的基本单位,以一种抢占时间片的状态来执行。而处理器cpu同一时间只能运行一个线程。
到了这,就容易犯迷糊了,我也迷糊过,既然它只能运行一个,为什么还要用多线程,如果只是运行一个简单的函数,抢时间片图啥嘛,让它单线程一路走完不就好了。其实没有错,只运行一个简单的函数,是没必要用多线程的,使用了反而会浪费时间。
关键在于,一个程序的运行,它不止是一个简单函数啊。。。拿手机来说,我们可以听着歌聊天,就是多线程的体现了;如果不用多线程,那就只能聊天或者只能听歌。看网页,你在看的时候,别人不能看,甚至,你只能看,不能点击也不能滑动。。。
多线程其实是假象,它还是在一个一个线程的去执行,因为cpu运行和切换线程的速度非常快,我们感觉不到。就像太阳光有七种颜色,还有紫外线红外线的,我们看到的只是光,亮亮的,啥颜色没有。。
还不太了解的话,再做个比喻,人的大脑是单核单线程处理器,一次也只能处理一个事情。一心不能两用吗?可以试一下,你能一手画圆一手画方吗?不能。。。
还有看书和扣脚丫它不是同时进行的,在看书的时候,手是停止的,大脑发一个指令,速度很快,自己也感觉不到,手就去扣脚丫了。但大脑的注意力在那一瞬间已经从看书的状态下停下了,你没在看书,而去抠脚丫了。只是速度很快了后,你扣一下就看几个字,然后又扣一下再看几个字,别人看起来就像看书和扣脚丫同时进行了。
包括我们在上课时,脑子里胡思乱想是可以的,想和知识有关的还会促进学习,但不能想太多没用的,也不能想太长,不然就会严重影响学习的效率。
再返回程序上来看,单线程是肯定不行的,不能满足我们的需求,那简直不能用啊,所以必须有多线程,但多线程乱用就可能变慢,变卡【大家应该都听过几核几线程的cpu,这是真正多线程,可远远不够,还得有很多伪多线程来帮忙】。
这也算是一个写程序时,很少主动写多线程代码的原因,我们用的框架和技术啊,一般都偷偷的做了【框架只针对大多数,也有些特殊的业务需求,需要手动创建新的线程来提高效率,比如上传/下载多个文件,cpu闲着也是闲着,不用白不用】。
end,没啥具体的,有些地方可能还不正确,只是希望能帮助大家理解!
领取专属 10元无门槛券
私享最新 技术干货