线程相关八股

1. 线程和进程的区别?

进程:进程可以简单理解为进行一个程序,比如说我们打开一个浏览器,打开一个文本,这就是开启了一个进程,一个进程想要在计算机中运行,需要将程序交给CPU,将数据存储在内存中,然后还要在内存和磁盘之间进行一些IO。所以进程就是用来加载指令、管理内存、管理IO的。

线程:线程就是一条条指令流,将这些指令交给CPU就是在运行该线程。一个进程可以有多个线程。

二者区别:进程就是正在运行程序的实例,进程中包含了线程,每个线程执行不同的任务;

                  不同的进程使用不同的内存空间,在当前进程下的所有线程可以共享内存空间;

                  线程更轻量,线程上下文切换成本一般比进程要低。 

2. 并行和并发有什么区别?

在单核CPU下,线程实际上是串行执行的。一般会将这种线程轮流使用CPU的做法叫做并发(concurrent)。

在多核CPU下,每个核都可以调度运行线程,这时候线程可以是并行的。但是对于其中一个核来说,还是串行执行线程的。

并发指的是同一时间应对多件事情的能力;并行指的是同一时间动手做多件事情的能力。

在多核CPU下,并发是指多个线程轮流使用一个或者多个CPU;并行是同一时间动手做多件事情的能力,4核cpu同时处理4个线程。

3.  创建线程的方式有哪些?

继承Thread类,实现runnable接口,实现Callable接口,使用线程池创建线程(一般在项目中使用)。

那使用runnable和callable创建线程的区别是什么呢?

runnable接口的run方法是没有返回值的,而callable接口的call方法是有返回值的,是个泛型,和Future、FutureTask配合使用来获取异步执行的结果;callable接口的call方法允许抛出异常,而runnable接口的run方法的异常只能在内部进行消化即try...catch,不能继续上抛。

线程的run方法和start方法有什么区别?

start是用来启动线程的,通过该线程调用run方法执行run方法中的逻辑代码,start方法只能被调用一次,因为一个线程开启只能开启一次。

而run方法就是一个普通方法封装了代码逻辑,所以可以调用多次

4. 线程包括哪些状态,状态之间是如何变化的?

首先线程包含以下6种运行状态:NEW、RUNNABLE、TIMED_WAITING、WAITING、BLOCKED、TERMINATED。

状态之间的转换:首先,当一个线程被创建时,就为NEW状态,接着运行start方法,但这时CPU可能正在处理其他线程,所以暂时该线程没有执行权,直到抢到了CPU执行权,正常情况下就开始执行线程了,这个中间没有执行权的状态叫做RUNNABLE,当线程结束之后就会进入TERMINATED状态,死亡。以上是正常的执行情况,可能遇到一些异常情况,比如说当线程种使用了锁时,别的线程就拿不到锁,无法执行,进入BLOCKED阻塞状态,直到拿到锁。还有,当执行wait()方法时,线程就进入了WAITING等待状态,直到执行notify()方法,将其唤醒。还有一种是当前线程执行sleep(50)方法,就进入了TIMED_WAITING计时等待状态,等到时间了,就可以执行了。

5. 新建T1、T2、T3三个线程,如何保证他们按顺序执行?

可以使用线程中的join()方法等待线程结束。在如下的例子中,在t2中有一个方法是t1.join,意味着t2只有当t1运行结束之后才会执行,这样就能保证线程间按照顺序执行。

6. notify()和notifyAll()有什么区别?

notifyAll:唤醒所有wait的线程;

notify:只随机唤醒一个wait线程。

7. 在Java中wait和sleep方法的不同点?

共同点:wait()和sleep()的效果都是让当前线程暂时放弃CPU的使用权,进入阻塞状态。

不同点:(1)方法归属不同:sleep是Thread的静态方法;而wait都是成员方法,每个对象都有。

(2)醒来时机不同:sleep和wait的线程都会在等待对应时间后醒来。wait还可以被notify唤醒,但是sleep不可以。他们都可以呗打断唤醒。

(3)锁特性不同:wait方法的调用必须先获取该对象的锁,而sleep不需要;wait方法执行后会释放锁,允许其他线程获取到该锁。而sleep如果在synchronized代码中执行,并不会释放对象的锁。

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

有三种方法可以停止线程:(1) 使用退出标志,使线程正常退出,也就是当run方法执行完后线程终止。(2) 使用stop方法强行终止,但是这种方法已经作废了。(3) 使用interrupt方法中断线程:如果打断阻塞的线程,比如说使用sleep,wait,join方法的线程,线程就会抛出interruptedException异常;如果打断正常的线程,可以根据打断状态来标记是否退出线程。

9. synchronized 关键字的底层原理?

synchronized

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

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

相关文章

水仙花数(华为OD)

题目描述 所谓水仙花数,是指一个n位的正整数,其各位数字的n次方和等于该数本身。 例如153是水仙花数,153是一个3位数,并且153 13 53 33。 输入描述 第一行输入一个整数n,表示一个n位的正整数。n在3到7之间&#x…

写一写idea中使用tomcat启动activiti过程

一 环境 tomcat 9.0.62 activiti的war包版本 7.1.0.M6 二 操作 官网下载:https://www.activiti.org/get-started 2.1 先在idea中编辑配置 2.2 点击加号然后选择tomcat本地进行确认 2.3 点击部署之后下边小加号 选择第二个之后就是选择自己想要使用tomcat启动的…

【每日一题 | 2025】2.24 ~ 3.2

个人主页:Guiat 归属专栏:每日一题 文章目录 1. 【2.24】P10424 [蓝桥杯 2024 省 B] 好数2. 【2.25】P8665 [蓝桥杯 2018 省 A] 航班时间3. 【2.26】P10905 [蓝桥杯 2024 省 C] 回文字符串4. 【2.27】P10425 [蓝桥杯 2024 省 B] R 格式5. 【2.28】P10426…

11.【线性代数】——矩阵空间,秩1矩阵,小世界图

十一 矩阵空间,秩1矩阵,小世界图 1. 矩阵空间交集 和 和集 2. 所有解空间3. r 1 r1 r1的矩阵4. 题目5. 小世界图 空间:组成空间的元素的线性组合都在这个空间中。 1. 矩阵空间 举例:矩阵空间( M M M 所有3x3的矩阵&…

我代表中国受邀在亚马逊云科技全球云计算大会re:Invent中技术演讲

大家好我是小李哥,本名叫李少奕,目前在一家金融行业公司担任首席云计算工程师。去年5月很荣幸在全球千万名开发者中被选为了全球亚马逊云科技认证技术专家(AWS Hero),是近10年来大陆地区仅有的第9名大陆专家。同时作为…

【Linux学习笔记】Linux基本指令及其发展史分析

【Linux学习笔记】Linux基本指令及其发展史分析 🔥个人主页:大白的编程日记 🔥专栏:Linux学习笔记 文章目录 【Linux学习笔记】Linux基本指令及其发展史分析前言一. Linux发展史1.1 UNIX发展的历史1.2 Linux发展历史1.3 开源1.4…

gradle libs.versions.toml文件

1.libs.versions.toml介绍2.创建libs.versions.toml文件3.libraries5.versions6.plugins7.bundles 1.libs.versions.toml介绍 下图是官网介绍 意思就是说项目所有插件和库的依赖版本都统一在这个文件配置。 文件中有以下四个部分 versions, 申明要使用的插件和库的版本号的…

【Git】Ubuntu 安装 Git Large File Storage(LFS)以及使用 Git LFS 下载

【Git】Ubuntu 安装 Git Large File Storage(LFS)以及使用 Git LFS 下载 1 安装1.1 使用脚本安装1.2 使用 packagecloud 安装 2 使用2.1 下载 1 安装 1.1 使用脚本安装 参考文档: Link 下载安装包: Link 解压安装包 tar -xzvf git-lfs-linux-amd64-v3.…

c++进阶--多态

大家好,今天我们来学习c进阶的第二课:多态。c的三大特性就是封装,继承和多态。那么今天我们就来学习一下多态。 目录 1. 多态的概念 2. 多态的定义及实现 2.1 多态的构成条件 2.1.1 实现多态还有两个必须重要条件 2.2 虚函数 2.3 虚函…

2月28日,三极管测量,水利-51单片机

众所周知,三极管(BJT)有三个管脚,基极(B)、集电极(C)、发射极(E),在实际应用中,不可避免地会遇到引脚辨别的问题。接下来就讲下三极管…

解决git clone下载慢或者超时问题

在网上找了很多办法,直接最简单的使用镜像网站下载。 国内可用的镜像网站有: https://github.com.cnpmjs.org # 服务器位于香港https://gitclone.com # 服务器位于杭州https://doc.fastgit.org # 服务器位于香港 例如:将 git clone https:…

SQL 全面指南:从基础语法到高级查询与权限控制

SQL:全称 Structured Query Language,结构化查询语言。操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准 。 一、SQL通用语法 在学习具体的SQL语句之前,先来了解一下SQL语言的同于语法。 1). SQL语句可以单行或多…

【AD】4-8 AD集成库的创建与安装

集成库:集成好元件信息、元件原理图库、PCB封装库、3D模型等的元件库,直接调用器件不可修改。 AD集成库创建 1.文件—新的—库,选择库工程,右键保存 2.将原理图库和PCB封装库复制到创建的集成库文件夹,并右键单击库工…

【大模型学习笔记】0基础本地部署dify教程

目录 一、准备工作1、安装包下载1.1 安装git1.2 安装docker(1)默认安装(2)自定义路径安装(推荐)1.3 验证docker1.4 切换镜像源 二、下载dify源码三、启动dify1、在docker目录下启动dify2、验证3、浏览器中输入 一、准备工作 本地…

unity pico开发 五 UI交互

文章目录 添加画布添加交互组件取消传送射线对UI的控制解决按扳机键会传送的冲突按下按键呼出菜单,并让菜单出现在头的前方 添加画布 创建一个新画布,添加一个Button,将画布改为world space,然后缩放改为0.001,调整到…

上海公共数据授权运营实践详解(政策制度、运营模式、运营平台、运营成果、场景案例)

近期,国家公共数据资源登记平台正式上线,将进一步推动公共数据授权运营加速推动。本期分享:上海市公共数据授权运营实践,上海公共数据授权运营为统一集中授权,上海数据集团作为上海公共数据授权运营的唯一单位&#xf…

HTTP超文本传输协议

HTTP超文本传输协议 HTTP的基本原理HTTP请求的组成HTTP响应的组成HTTP请求方法HTTP状态码HTTP的无状态性和持久连接HTTPS(HTTP Secure)Cookie 和 SessionCookieSession对比 总结 HTTP(超文本传输协议)是一种用于从Web服务器传输超…

android TabLayout设置tab的时候文字默认居中,选中文字加粗

1、前言如题 TabLayout设置tab的时候文字默认居中,在TabLayout布局增加以上代码。 tab选中文字加粗,需要重写TabLayout的customview进行设置。 app:tabMaxWidth"0dp" app:tabGravity"fill" app:tabMode"fixed"

二叉树专题练习 ——基于罗勇军老师的《蓝桥杯算法入门C/C++》

目录 一、B3642 二叉树的遍历 - 洛谷 算法代码: 1. 代码结构 头文件和命名空间: 常量定义: 结构体定义: 前序遍历函数: 中序遍历函数: 后序遍历函数: 主函数: 2. 代码思路…

健康饮食,健康早餐

营养早餐最好包含4大类食物:谷薯类;碳水;蛋白质;膳食纤维。 1.优质碳水 作用:提供持久的能量,避免血糖大幅波动等 例如:全麦面包、红薯🍠、玉米🌽、土豆🥔、…