博文——“秒杀多线程”第一篇问题答案

本人正在学习多线程知识,朋友推荐博文“秒杀多线程”,在这里对第一篇“秒杀多线程第一篇 多线程笔试面试题汇总”的题目做解答整理。同时我也想学习多线程的您推荐此博文。

本文所涉及的只是也是从其他博文或书本中获得,只是再此做归纳整理。有不对之处欢迎批评指正

原文地址ps://blog.csdn.net/morewindows/article/details/7392749

 


第一题:线程的基本概念、线程的基本状态及状态之间的关系?

解答:

1.线程的gain概念:

    进行运算的最小单位,线程的上一级是进程,一个进程可以有多个线程,每个线程完成不同的工作,但是该进程的资源被线程共享,同时,线程也拥有属于其自己的资源,如线程的调用栈、寄存器、内存资源等。

    同时,属于计算机操作系统的线程称为系统线程(当然也有系统集成),用于创建的线程称为用户线程。

2.线程的基本状态:

对于线程状态的理解,参考博文“线程的基本概念,基本状态、状态之间的关系”所得,

原文地址:https://blog.csdn.net/maoyuanming0806/article/details/78019044

    1):新建    即创建一个线程对象,为这个线程分配了内存空间  

    2):等待    即我们已经实例化了一个线程对象,但是现在还没有调用它,它就处在一个等待调用的状态

    3):就绪    当一个线程被调用后,它不会立刻执行,而需要等待CPU为其分配执行权限,即CPU让他执行它才可以执行,这个等待的状态,就是就绪(即我已经准备就绪,只等一声枪响,就可以开始奔跑,run)

    4):运行    显而易见,就是这个线程在执行其代码,running

    5):阻塞    在线程T1运行过程中,CPU可能会让另一个进程T2运行(比如时间片轮转等原因),这是线程T1就被阻塞(或称为挂起),这是线程T1会进入“就绪”状态,等待CPU再次允许其执行,

    6):消亡   显而易见,线程的所有执行任务完成,或者遇到异常,线程就消亡了

3.线程状态之间的关系

本图来自博文:https://blog.csdn.net/maoyuanming0806/article/details/78019044

    https://i-blog.csdnimg.cn/blog_migrate/52b4b17ac1ffc89f571475ef0a75c9de.jpeg


题目二:线程与进程的区别

此题目的整理通过参考文章:https://baijiahao.baidu.com/s?id=1611925141861592999&wfr=spider&for=pc所得

    1):线程是进程的单位,一个进程可以有多个线程,线程间共享这个进程的资源,比如一个浏览器,QQ,微信,都是进程,即每个进程都是独立的。

    2):线程又称为轻量级进程,线程体积小,是计算机运行最小单位,维护和管理的开销小于进程

    3):线程没有地址空间,一个进程包含多个线程,所有线程共享该进程的地址空间

    4):线程间不可通信,父子进程之间可以通过进程间通信机制进行交流,而线程之间无法通信,只能通过他们共享的进程进程资源进行间接交流。比如一个进程拥有一个int a = 10变量,线程T1进行了a +=1操作,当线程T2访问a时就会知道“哦,这个变量进行了加1操作”。

    5):线程间可以彼此操作,而进程不可以。比如,同属于一个进程的任何线程,都可以操作其它线程,使其挂起、销毁,同时,线程也可以通过销毁主线程来销毁进程。而进程不可以彼此操作,属于同一个父进程的所有子进程之间不可操作,同样子进程也不可以操作父进程。


题目三:多线程有几种实现方法,都是什么?

未找到理想答案,待补充

看了几篇博客,觉得自己多线程的理解还是有问题,比如,“多线程是什么意思,是如何在一个进程中创建多个线程,然后这多个线程来完成这个进程的工作吗?那就挨个线程创建就好了呀”。

但是找到了几个JAVA实现多线程的方法:继承Thread类、实现Runnable接口、实现Callable接口通过FutureTask包装器来创建Thread线程、使用ExecutorService、Callable、Future实现有返回结果的多线程。可参考https://www.cnblogs.com/felixzh/p/6036074.html

参考https://blog.csdn.net/wolenski/article/details/7969908这里有同样的内容,都是对这些题目的解答,当然,我觉得他的回答geng更好

四:多线程同步和互斥有几种实现方法,都是什么?

1):所谓同步,同步并不是多个线程在tong同一时间点同时执行,这是不可能实现的。“同步”意为着,在线程T1访问资源int a 的时候,其它线程比如T2不会去访问他,在T1访问int a的时候,要进行锁操作,即等我T1执行完毕放开锁的之后,其它进程T2再去访问int a。在C++中,用 std::lock_guard<std::mutex> mtx_locker(mtx);互斥锁来实现,然而更好的方法是使std::lock_guard类模板来实现互斥,参考:https://www.cnblogs.com/jzincnblogs/p/5188051.html

题目五:多线程同步和互斥有何异同,在什么情况下分别使用他们?举例说明。

1):同步,即线程之间存在一种制约关系,当一个线程执行时,其它线程处于挂起状态,等一个线程执行完毕时,通知挂起的线程开始执行,

2):互斥,即对于同一块数据的访问,同一时间片只能存在一个线程对其进行访问(一般是输出操作,即系统向一个数据块输出数据,输入,一般是指系统从一个数据块读入数据),其它访问该数据的线程,必须等待,这种等待是强制的。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值