莫名其妙的女朋友做了人工智能学院的老师。。。今天娘娘问我,“小欢子多线程是什么?“,我在想怎么用通俗的语言告诉她呢? 想来想去,决定给她打个比方。我说”回娘娘,多线程就好比你在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抢到了线程权但是没有获得锁也任然无法操作数据,保证了安全性。至于用法你们自己去看喽。

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

  1. 深夜凌晨女朋友问什么是数据仓库,我的回答让她惊讶,然后发现。。。

    2021大数据领域优质创作博客,带你从入门到精通,该博客每天更新,逐渐完善大数据各个知识体系的文章,帮助大家更高效学习. 有对大数据感兴趣的可以关注微信公众号:三帮大数据 事情是这样的 晚上,正在聚精 ...

  2. 线程同步有几种方法_架构师面试必问的多线程状态切换及常用方法

    架构师面试必问的多线程状态切换及常用方法 一.问题背景 Java架构师面试中,多线程状态切换及常用方法几乎是必问的,要掌握创建多线程的方式和方法. 二.创建多线程的几种方式 2.1方式一继承Threa ...

  3. 面试突然问Java多线程底层原理,我哭了!

    兄弟们,不要踩坑啊,我原本打算在金九银十之前换份工作,结果出去第一面就被干懵了! 面试官上来就问我了解不了解多线程,我感觉我还可以,我就和他说:必须的! 不过,他直接问了多线程的底层原理,这我都是一知 ...

  4. 面试被问到这道送命题,怎么回答才不会变成炮灰

    你在面试时,有没有被问到这个问题:请问你从上家公司离职的理由是什么? 这段时间,疫情刚进入尾声,身边很多想换工作的朋友都开始找工作了,所以向我问这个问题的人特别多.于是,我把这个问题发到朋友圈里,看看 ...

  5. 女朋友问我:小松子,你知道Go语言参数传递是传值还是传引用吗?

    前言 哈喽,大家好,我是asong.今天女朋友问我,小松子,你知道Go语言参数传递是传值还是传引用吗?哎呀哈,我竟然被瞧不起了,我立马一顿操作,给他讲的明明白白的,小丫头片子,还是太嫩,大家且听我细细 ...

  6. PHP 多服务器多线程同步推送思想

    为什么要使用多线程,效率翻倍提升,节省时间. 第一步: 我们需要有主要推送任务的核心脚本,这里我叫做-推送脚本. 第二步:我们需要有一个任务的启动器,也就是一个开启多线程的脚本,主要实现是链接多个服务 ...

  7. 面试必问!多线程并发问题

    多线程并发问题,基本是面试必问的. 大部分同学应该都知道Synchronized,Lock,部分同学能说到volatile.并发包,优秀的同学则能在前面的基础上,说出Synchronized.vola ...

  8. ###好好###远离送命题: 问答系统中语义匹配的『杀手锏』

    本文将介绍一套『独创』的语义匹配方法论和一个杀手级模型 本文受众: 自然语言处理/问答系统/智能助手/搜索/推荐 等相关行业从业者 对自然语言处理/智能助手感兴趣的普通读者 1. 引子 『问& ...

  9. 如何最巧妙回答HR面试“送命题”:你为什么离开上家公司?

    一 HR面试存在"送命题"? 一个资深HR朋友聊到,他最近pass掉一个名校高材生. 其实洽谈过程还比较愉悦,小姑娘名校毕业,落落大方,薪酬要求比较合理,各方面都比较符合,最后就在 ...

最新文章

  1. 基于 EntityFramework 的数据库主从读写分离架构(2)- 改进配置和添加事务支持...
  2. java vector arraylist linkedlist用法与区别
  3. vb6 combo根据index显示_彻底搞懂CSS层叠上下文、层叠等级、层叠顺序、z-index
  4. 类似 Observer Pattern 的 NSNotificationCenter (实例)
  5. linux-gcc 编译时头文件和库文件搜索路径
  6. postgresql 中int4rang类型项目应用
  7. Boost Thread 编程指南、Boost线程入门教程
  8. java如何查内存泄露_如何排查Java内存泄露
  9. 联想计算机无线网络设置密码,联想笔记本电脑wifi怎么连接
  10. Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
  11. JAVA项目答辩的自我评价_毕业论文答辩自我评价
  12. 在美团,我从暑期实习到转正
  13. 双路CPU笔记本计算机,什么是双路cpu cpu双路什么意思 - 云骑士一键重装系统
  14. “K米” 软件产品评测
  15. 分布式调度框架大集合
  16. rips php,审计PHP工具篇之 RIPS
  17. 可视化,市场分析表Excel模板,财务统计EXCEL模版,人员变动EXCEL模版,销量完成度Excel模板
  18. java计算三角形面积和周长
  19. 电容或电感的电压_如何通俗的理解电流,电压,电阻,电容和电感电工技术知识学习干货分享...
  20. 协方差矩阵和相关矩阵的关系

热门文章

  1. TIA博途_基于SCL语言制作模拟量输入输出全局库的具体方法
  2. 《⑨也懂系列:GNU Emacs安装教程Ver.2》世界著名的顶级全能文本编辑器
  3. mpu6050三轴加速度数据,三轴角速度数据显示
  4. 爬虫中使用selenium实现对斗鱼直播的各个房间标题、主播id,直播内容类型和热度信息的爬取
  5. 0.96寸OLED显示屏标准库移植HAL库(模拟IIC) - 基于STM32
  6. springboot导入后Spring包飘红问题解决
  7. 帝国cms自动生成html首页,分享一个帝国CMS定时生成首页(自动刷新首页)的方法...
  8. 我的七条人生哲理以及个人学习方法总结
  9. C++——素数(质数)专题训练
  10. git 使用meld 进行文本对比