多线程八股文常见面试题总结(一)

java多线程基本面试题 

目录

前言

一、创建多线程的方式有哪些?

二、runable接口和callable接口有什么区别?

三、run和start有什么区别?

四、线程的状态之间是如何变化的?

五、新建T1、T2、T3如何保证他们的顺序执行?

六、notify()和notifyall有什么不同?

七、wait和sleep有什么异同?

8.如何停止一个正在运行的线程?

2.读入数据

总结


前言

  多线程基本面试题上,多线程的创建、状态、方法全方面面试题总结


一、创建多线程的方式有哪些?

1.继承thread类,重写run方法

2.实现runable接口,重写run方法

3.实现callable接口,重写call方法,将实例化的对象交给Furntask进行管理

4.线程池创建线程对象

二、runable接口和callable接口有什么区别?

1.runable接口没有返回值

2.callable接口call方法有返回值,返回值为泛型,和FutureTask配合获取异步执行结果

3.callable接口call方法可抛出异常,runable的run方法只能内部消化,不可以上抛

三、run和start有什么区别?

1.start表示开启线程,通过线程的对象调用run方法中的逻辑代码,只能调用一次

2.run方法封装被线程执行的代码,可以调用多次

四、线程的状态之间是如何变化的?

1.创建对象->新建状态

2.start->可执行状态(就绪)

3.获取CPU,执行结束->终止状态

4.可执行状态中,没有获得锁->阻塞状态

5.可执行状态中,wait->等待状态

6.可执行状态中,sleep->计时等待状态

五、新建T1、T2、T3如何保证他们的顺序执行?

可以使用插入线程,在T3中使用T2.join,在T2中使用T1,.join来保证线程的顺序执行

六、notify()和notifyall有什么不同?

notify是唤醒随记一个wait线程

notifyall是唤醒所有wait线程

七、wait和sleep有什么异同?

1.wait和sleep都是让当前线程放弃CPU的执行权

2.sleep是Thread的静态方法,wait是Object的成员方法,每个对象都有

3.sleep(long)和wait(long)会在等待时间结束后醒来,wait(long)和wait()可以被notify唤醒

4.都可以被打断唤醒

5.wait方法调用必须先获取到wait对象的锁,sleep不用

   wait方法执行后会释放对象的锁

   sleep在sychronized代码块中执行,不会释放锁

八、如何停止一个正在运行的线程?

1.使用一个退出标致,如flag,使线程正常退出

2.使用stop方法强行退出,不推荐

3.使用interrupt中断线程

 (1)打断为阻塞线程,sleep、wait、join等会抛出interruptedException异常

 (2)打断正常的线程,根据打断状态标记的状态来退出线程


总结

  多线程的创建方式,对其run、start、sleep和notify等方法的全方面面试题进行总结。

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

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

相关文章

MySQL优化慢SQL的6种方式

⛰️个人主页: 蒾酒 🔥系列专栏:《mysql经验总结》 🌊山高路远,行路漫漫,终有归途 目录 写在前面 优化思路 优化方法 1.避免查询不必要的列 2.分页优化 3.索引优化 4.JOIN优化 5.排序优化 6.UNION 优化…

无线网络2.4和5G的区别

无线网络2.4和5的区别 无线网络2.4GHz和5GHz的主要区别在于频率、覆盖范围、传输速度、干扰能力和穿透性。以下是详细介绍:12 频率不同。2.4GHz的频率较低,而5GHz的频率较高。频率越低,信号在传播过程中的损失越小,因此覆盖范围…

如何在 Ubuntu 14.04 上配置一个生产就绪的 Mesosphere 集群

简介 Mesosphere 是一个系统,它结合了许多组件,可以在现有操作系统层之上有效地管理服务器集群和高可用部署。与 CoreOS 等系统不同,Mesosphere 不是一个专门的操作系统,而是一组软件包。 在本指南中,我们将介绍如何…

linux学习:文件属性

在操作文件的时候,经常需要获取文件的属性,比如类型、权限、大小、所有者等等, 这些信息对于比如文件的传输、管理等是必不可少的,而这些信息 这三个函数的功能完全一样,区别是:stat( )参数是一个文件的名字…

网络篇05 | 应用层 http/https

网络篇05 | 应用层 http/https 01 HTTP请求报文协议(Request)1)Request简述2)请求行(首行)3)请求头(Request Headers)4)空行5)正文(Re…

【机器学习300问】67、均方误差与交叉熵误差,两种损失函数的区别?

一、均方误差(Mean Squared Error, MSE) 假设你是一个教练,在指导学生射箭。每次射箭后,你可以测量子弹的落点距离靶心的差距(误差)。MSE就像是计算所以射击误差的平方后的平均值。它强调了每一次偏离靶心的…

ARM v8 Cortex R52内核 04 时钟和复位 Clocking and Resets

ARM v8 Cortex R52内核 04 时钟和复位 Clocking and Resets 4.1 Clock and clock enables 时钟和时钟使能 Cortex-R52处理器具有一个单一的时钟,驱动着所有的触发器和RAM。各种输入,包括复位输入,都有同步逻辑使它们可以与处理器时钟异步操…

appium控制手机一直从下往上滑动

用于使用Appium和Selenium WebDriver在Android设备上滚动设置应用程序的界面。具体来说,它通过WebDriverWait和expected_conditions等待元素出现,然后使用ActionChains移动到该元素并执行滚动动作。在setUp中,它初始化了Appium的WebDriver和c…

Android中的Zygote进程介绍

在Android系统中,Zygote是一个特殊的进程,主要负责孵化(fork)新的应用进程,从而加速应用的启动过程。Zygote进程是系统启动过程中创建的第一个进程,它会在系统启动时被初始化并一直运行在后台。 以下是Zyg…

如何在MacOS上使用OpenHarmony SDK交叉编译?

本文以cJSON三方库为例介绍如何通过OpenHarmony的SDK在Mac平台进行交叉编译。 环境准备 SDK准备 我们可以通过 openHarmony SDK 官方发布渠道下载对应mac版本的SDK,当前OpenHarmony MAC版本的SDK有2种,一种是x86架构,另一种是arm64&#x…

【HTML】HTML简介

参考资料:https://html.spec.whatwg.org/#introduction 在最初的五年(1990-1995)中,HTML经历了一系列修订和扩展,最初主要由欧洲核子研究组织(CERN)托管,随后由互联网工程任务组&am…

Anaconda在Ubuntu下的安装与简单使用

一、参考资料 ubuntu16.04下安装&配置anacondatensorflow新手教程 二、安装Anaconda 下载 Miniconda镜像1 or Miniconda镜像2 # 下载 wget Miniconda3-py39_4.10.3-Linux-x86_64.sh# 安装 bash Miniconda3-py39_4.10.3-Linux-x86_64.sh一路yes 安装过程中的选项 Do you …

做一个后台项目的架构

后台架构的11个维度 架构1:团队协助基础工具链的选型和培训架构2:搭建微服务开发基础设施架构3:选择合适的RPC框架架构4:选择和搭建高可用的注册中心架构5:选择和搭建高可用的配置中心架构6:选择和搭建高性…

Hudi-ubuntu环境搭建

hudi-ubuntu环境搭建 运行 1.编译Hudi #1.把maven安装包上传到服务器 # 官网下载安装包 https://archive.apache.org/dist/maven/maven-3/ scp -r D:\Users\zh\Desktop\Hudi\compressedPackage\apache-maven-3.6.3-bin.tar.gz zhangheng10.8.4.212:/home/zhangheng/hudi/com…

Spring+SpringMVC的知识总结

一:技术体系架构二:SpringFramework介绍三:Spring loC容器和核心概念3.1 组件和组件管理的概念3.1.1什么是组件:3.1.2:我们的期待3.1.3Spring充当组件管理角色(IOC)3.1.4 Spring优势3.2 Spring Ioc容器和容器实现3.2.1普通和复杂容器3.2.2 SpringIOC的容器介绍3.2.3 Spring IOC…

字符串常量池(StringTable)

目录 String的基本特性 String的内存分配 字符串拼接操作 intern()的使用 String的基本特性 String:字符串,使用一对""引起来表示 String声明为final的,不可被继承 String实现了Serializable接口:表示字符串是支持…

考试酷基本功修炼课学习历程_FPGA成长篇

本文为明德扬原创文章,转载请注明出处!作者:明德扬学员:考试酷账号:11167760 我是硬件工程师,日常工作中主要跟数字电路、模拟电路、嵌入式系统打交道,当然也会涉及到FPGA,但是苦于…

排序算法-基数排序

基数排序是一种非比较排序算法,它将待排序的数字按照位数进行排序。基数排序的思想是先按照个位数进行排序,然后按照十位数进行排序,接着按照百位数进行排序,以此类推,直到最高位排序完成。 基数排序的步骤如下&#x…

设计模式代码实战-桥接模式

1、问题描述 小明家有一个万能遥控器,能够支持多个品牌的电视。每个电视可以执行开机、关机和切换频道的操作,请你使用桥接模式模拟这个操作。 输入示例 6 0 2 1 2 0 4 0 3 1 4 1 3 输出示例 Sony TV is ON TCL TV is ON Switching Sony TV channel S…

【菜狗学前端】原生Ajax笔记(包含原生ajax的get/post传参方式、返回数据等)

这回图片少,给手动替换了~祝看得愉快,学的顺畅!哈哈 一 原生ajax经典四步 (一) 原生ajax经典四步 第一步:创建网络请求的AJAX对象(使用XMLHttpRequest) JavaScript let xhr new XMLHttpRequest() 第二…