600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 今天女朋友问我多线程是什么?送命题?

今天女朋友问我多线程是什么?送命题?

时间:2021-07-11 03:23:57

相关推荐

今天女朋友问我多线程是什么?送命题?

莫名其妙的女朋友做了人工智能学院的老师。。。今天娘娘问我,“小欢子多线程是什么?“,我在想怎么用通俗的语言告诉她呢? 想来想去,决定给她打个比方。我说”回娘娘,多线程就好比你在Ipad看剧的时候还不忘用手机逛淘宝外加手中的吃吃吃,一个线程在看剧,一个线程在逛淘宝,一个线程在吃吃吃~“

好啦,言归正传,我们介绍一下多线程,嘿嘿

首先介绍两个概念:并发与并行

并发:指两个或多个任务在同一个时间段内发生,他们在宏观上是同时发生的,但是在微观上是交替执行的

并行:指两个或多个任务在同一时刻发生(同时发生),真正的同时发生

是不是感觉很绕?让我们用通俗的话来说,当我们去干饭干饭干饭的时候,并发就好比一个人吃两个馒头,一会吃一口这个,一会吃一口那个,并行就好比两个人吃两个馒头,同时吃。

我们可以把线程理解为“轻量级进程”,你们肯定要问进程是什么?浅显通俗的说,进程就是一个程序执行的过程,一个进程里可以包含多个线程

线程是一个基本的CPU执行单元,也是程序执行流的最小基本单位。引入线程之后,不仅是进程之间可以并发,进程内的各线程也可以并发,从而进一步提升了系统的并发度,使得一个进程内也可以并发处理任务,是不是感觉“一个进程内也可以并发处理任务”也比较抽象?我们可以再举一个栗子!当我们用微信和女朋友视频电话的时候,我们这个时候也可以和妈妈发文字聊天,同时也可以接收胡哥发的《如何一个小时进大厂》的PDF!

其实可以把线程理解为一个大程序里的小程序,反正我是这样理解的。。。

我们知道一个程序的状态就有两种,“运行状态或停止状态”,所以线程的状态也就这两种嘛?我们其实可以细分一下。我们以JVM划分为例

线程的状态

创建至今还未启动的线程是一个NEW状态正在JVM种执行的线程处于RUNNABLE状态受阻塞并等待某个锁的线程处于BLOCKED状态无限期等待某个特定条件来启动的线程处于WAITING状态有限时间内处于等待的线程处于TIMED_WAITING状态已执行完run方法的线程,即已退出等待JVM垃圾回收的线程处于TERMINATED状态

说到这里,小伙伴们要注意JVM是把线程状态细分了有6种,可能C++又可能把线程状态分为7种,8种。。。但是总的来说线程可以分为新生态,就绪态,运行态,阻塞态,死亡态这五种基本状态(OS也是这样分的)。

然后我们再想一个问题,当有多个线程时他们的执行顺序又是啥呢?我们可以以我们的常识推理一下,无非就是 1 按照创建顺序,CPU平均分时间执行每个线程 2 根据线程优先级执行3 拼运气喽,谁抢到算谁的,哈哈

这个具体的方式是由OS决定的,主流操作系统目前都是抢占式的(回头复习完操作系统再来详细写一篇,说错勿怪说错勿怪)

继续想一个问题,哈哈,问题没完没了。假如我们将多线程想象为售卖电影票的售票员,他们的售卖的是同一种电影票,这就可能存在一个问题,假设此时售票员A已经把最后一张电影票售出,但是售票员B还在售票,此时就会出现负票数了,又或者当售票员A抢到了线程权且准备售卖第50张票的时候,在售票的一瞬间,失去了线程权,没有对票数进行减操作,售票员B抢到了线程权并进行售票,他们同时售卖了同一张票,说了这么多就是想引出多线程在操作同一个数据时是不安全的,注意,是在操作同一个数据时,嘿嘿。

处理多线程安全问题,在Java的世界中可以使用Lock锁,以及synchronized关键字,锁住多线程要共同操作的变量,这样就可以保证就算线程B抢到了线程权但是没有获得锁也任然无法操作数据,保证了安全性。至于用法你们自己去看喽。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。