关于多线程的几道面试题

点击蓝字

ceaf7f3b63f6f7060feade042e83e229.png

关注我们

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

线程,有时称为轻量级进程,是CPU使用的基本单元;它由线程ID、程序计数器、寄存器集合和堆栈组成。

它与属于同一进程的其他线程共享其代码段、数据段和其他操作系统资源(如打开文件和信号)。

线程有四种状态:新生状态、可运行状态、被阻塞状态、死亡状态。状态之间的转换如下图所示:

86f07d82363198c1aa07bb790fe7e3b9.png

第二题:线程与进程的区别?

1、 线程是进程的一部分,所以线程有的时候被称为是轻权进程或者轻量级进程。


2、 一个没有线程的进程是可以被看作单线程的,如果一个进程内拥有多个进程,进程的执行过程不是一条线(线程)的,而是多条线(线程)共同完成的。


3、 系统在运行的时候会为每个进程分配不同的内存区域,但是不会为线程分配内存(线程所使用的资源是它所属的进程的资源),线程组只能共享资源。那就是说,出了CPU之外(线程在运行的时候要占用CPU资源),计算机内部的软硬件资源的分配与线程无关,线程只能共享它所属进程的资源。


4、 与进程的控制表PCB相似,线程也有自己的控制表TCB,但是TCB中所保存的线程状态比PCB表中少多了。


5、 进程是系统所有资源分配时候的一个基本单位,拥有一个完整的虚拟空间地址,并不依赖线程而独立存在。

1a2c626fe2786c3fa01e1110a499b325.png

关于多线程的几道面试题

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

 1. 继承 Thread 类
  2. 实现 Runnable 接口再 new Thread(YourRunnableOjbect) 

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


线程间的同步方法大体可分为两类:用户模式和内核模式。顾名思义,内核模式就是指利用系统内核对象的单一性来进行同步,使用时需要切换内核态与用户态,而用户模式就是不需要切换到内核态,只在用户态完成操作。


用户模式下的方法有:原子操作(例如一个单一的全局变量),临界区。内核模式下的方法有:事件,信号量,互斥量。

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

线程同步是指线程之间所具有的一种制约关系,一个线程的执行依赖另一个线程的消息,当它没有得到另一个线程的消息时应等待,直到消息到达时才被唤醒。

线程互斥是指对于共享的进程系统资源,在各单个线程访问时的排它性。

当有若干个线程都要使用某一共享资源时,任何时刻最多只允许一个线程去使用,其它要使用该资源的线程必须等待,直到占用资源者释放该资源。线程互斥可以看成是一种特殊的线程同步(下文统称为同步)。

*声明:本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。

3dc36b3ebe9ba5c84e776afacadc902a.png

1771e208a4b9f0d8e698febab4ac3c2f.gif

戳“阅读原文”我们一起进步

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/337738.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言 想输入非数字是报错误,C语言上机练习5C言上机练习5.doc

C语言上机练习5C言上机练习5C语言上机报告5 数组2上机内容找出下列程序中的错误并改正1) /*有一个34的矩阵,要求输出其中值最大的元素的值,以及它的行号和列号。*/#include "stdio.h"#define M 3//无分号#define N 4void main( ){ int max,i,j,r,c;int a[M][N]{{323…

大牛谈嵌入式C语言的高级用法

点击蓝字关注我们内存管理我们需要知道——变量,其实是内存地址的一个抽像名字罢了。在静态编译的程序中,所有的变量名都会在编译时被转成内存地址。机器是不知道我们取的名字的,只知道地址。 内存的使用时程序设计中需要考虑的重要因素之一&…

java转换为c#_C#vs Java哪一个更快? 将25k C#转换为Java(2)

java转换为c#在上一篇文章中,我描述了如何将25k行C#转换为Java以及从该练习中学到的教训。 我收到以下问题: 顺便说一句很棒的文章。 移植代码后,性能与C#版本相比如何? 改写系统的动机之一是使系统运行更…

基于人工神经网络的识别C语言,实验一基于人工神经网络的数码识别.doc

实验一基于人工神经网络的数码识别《人工智能导论》课程基于人工神经网络的数码识别班级:计1103学号:201107010330姓名:贾梦洁成绩评定:评阅老师:日 期:实验报告正文一、实验目的?????基于神经网络的数…

博科光纤交换机java_带有光纤的可扩展,健壮和标准的Java Web服务

博科光纤交换机java这篇博客文章讨论了负载下的基准Web服务性能。 要了解有关Web服务性能理论的更多信息,请阅读利特尔定律,可伸缩性和容错 。 使用阻塞和异步IO对Web服务进行基准测试 Web应用程序(或Web服务)如何在负载下&#…

很棒的C语言入门笔记,推荐收藏!

点击蓝字关注我们c语言入门C语言一经出现就以其功能丰富、表达能力强、灵活方便、应用面广等特点迅速在全世界普及和推广。C语言不但执行效率高而且可移植性好,可以用来开发应用软件、驱动、操作系统等。C语言也是其它众多高级语言的鼻祖语言,所以说学习…

自定义日历控android,Android自定义日历Calender代码实现

产品要做签到功能,签到功能要基于一个日历来进行,所以就根据 要求自定义了一个日历自定义控件相信做android都知道:(1)首先创建一个类,继承一个容器类或者是一个控件(2)然后就是你需要设置的属性等的,在attrs文件夹中(…

java jsf_将Java 8日期时间API与JSF和Java EE 7结合使用

java jsf如果您将Java 8与Java EE 7一起使用,则在尝试利用某些Java 8新功能时可能会遇到一些怪癖。 一个这样的怪癖是,默认情况下,新的Date-Time API不适用于许多Java EE 7 API,因为它们是为与java.util.Date和/或更旧的Date API一…

C语言的注释要注意几点

点击蓝字关注我们如果领导给你一个项目的源码让你阅读,并理解重构代码,但里面一句注释都没有,我想这肯定是之前同事“删库跑路”了。看一份源码什么很重要?除了各种代码规范之外,还有一个比较重要的就是注释。注释虽然…

java自动推断类型_推断:Facebook的新Java静态分析工具

java自动推断类型如何使用Facebook的Infer改善Java开发工作流程? 如果您与技术话题保持同步(如果您正在阅读此博客,我想您会这样做),那么您可能听说过Facebook 刚刚向公众发布的新工具:推断。 由于它来自F…

android官方架构组件,Android 架构组件官方文档01——LifeCycle

使用生命周期感知组件处理生命周期支持生命周期的组件执行操作以响应另一个组件(例如Activity和fragment)的生命周期状态更改。这些组件可帮助您生成组织性更好,并且通常更轻量的代码,这些代码更易于维护。常见的模式是在Activity和fragment的生命周期方…

C语言的核心和灵魂

点击蓝字关注我们提起C语言大部分开发者很自然就会想到指针二字,没错,作为C的核心和灵魂,它的地位咱们就不再赘述了。今天我们想跟大家讲的是指针中的两个特有名词:“悬空指针”和“野指针”。悬空指针C语言中的指针可以指向一块内…

gradle排除依赖_如何从Gradle中的所有依赖项中排除库

gradle排除依赖我正在使用Spring Boot。 默认情况下,Spring Boot带有Logback。 我想使用log4j(出于任何原因..) 为了做到这一点,我不得不排除logback并添加新的log4j依赖项: 在此软件包中“隐藏”了logback&#xff…

android搜索功能xml,Android_Android ActionBar搜索功能用法详解,本文实例讲述了Android ActionBar - phpStudy...

Android ActionBar搜索功能用法详解本文实例讲述了Android ActionBar搜索功能用法。分享给大家供大家参考,具体如下:使用ActionBar SearchView时的注意点:首先要吐槽一下Android的官方Guide文档 ,关于用法讲得不明确,可…

javaone_JavaOne 2015 –提交技巧和建议

javaone大家都知道JavaOne 。 感觉就像一直存在。 而且,即使我们跌宕起伏,而地理位置也不是我们想要的那样,旧金山也很昂贵,而且和。 这是有关各种Java的顶级会议。 今年又再次成为程序委员会(“ Java,DevO…

C语言_结构体总结,附实例源码

点击蓝字关注我们当前文章介绍动态堆空间内存分配与释放,C语言结构体定义、初始化、赋值、结构体数组、结构体指针的相关知识点,最后通过一个学生管理系统综合练习结构体数组的使用。1. 动态内存管理C语言代码----->编译----->链接------>可执行…

android webview file,Android WebView 不支持 H5 input type=file 解决方法

最近因为赶项目进度,因此将本来要用原生控件实现的界面,自己做了H5并嵌入webview中。发现点击H5中 input type"file" 标签 不能打开android资源管理器。通过网络搜索发现是因为 android webview 由于考虑安全原因屏蔽了 input type"file&…

maven 常量字符串过长_从基于Maven的Web应用程序获取版本字符串

maven 常量字符串过长打包maven项目时,它将自动在其中生成pom.properties文件,其中将包含版本,artifactId和groupId信息。 这些在运行时很方便拥有并显示给您的Web应用程序。 可以使用如下方法检索它。 public class Application {private S…

四大C语言知识总结

点击蓝字关注我们1、#define宏定义以#号开头的都是编译预处理指令,它们不是C语言的成分,但是C程序离不开它们,#define用来定义一个宏,程序在预处理阶段将用define定义的来内容进行了替换。因此在程序运行时,常量表中并…

android 5.0新增 ui 控件,android3.0新增ui控件示例说明.doc

android3.0新增ui控件示例说明Android3.0新增UI控件AdapterViewAnimator控件AdapterViewAnimator(堆View),已知子类有AdapterViewFlipper, StackView,是一系列View的集合,这些View叠加一起,并且View之间可以进行切换,并…