面试(03)————多线程

目录

一、线程和进程的区别?

二、并行和并发的区别? 

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

3.1、继承Thread类

3.2、实现Runnable接口

3.3、实现Callable接口

3.4、线程池

四、Runnable和Callable的区别?

五、在启动线程的时候,可以使用run方法吗?run()和start()有什么区别?

六、线程包含了哪些状态?状态之间是如何变化的?

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

八、notify和notifyAll有什么区别?

九、Java中wait方法和sleep方法有什么不同?

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

十一、synchronized关键字的底层原理

十二、Monitor实现的锁属于重量级锁。你了解过锁升级吗?

十三、谈谈JMM(Java内存模型)

十四、CAS

十五、乐观锁和悲观锁 

十六:谈谈你对volatile的理解 

十七、AQS 

 十八、ReentrantLock的实现原理

十九、synchronized和Lock有什么区别?

二十、死锁产生的条件?

二十一、如何进行死锁诊断?

二十二、ConcurrentHashMap

二十三、Java程序中怎么保证多线程的执行安全?(导致并发程序出现问题的根本原因是什么)

二十四、线程池的核心参数(线程池的执行原理)

二十五、线程池中有哪些常见的阻塞队列

二十六、如何确定核心线程数

二十七、线程池的种类有哪些

二十八、为什么不建议Executors创建线程池


一、线程和进程的区别?

进程:

  • 程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至CPU,数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理IO的
     
  • 当一个程序被运行,从磁盘加载这个程序的代码至内存,这时就开启了一个进程。
     
  • 进程就可以视为程序的一个实例。大部分程序可以同时运行多个实例进程(例如记事本、画图、浏览器等),也有的程序只能启动一个实例进程(例如网易云音乐、360安全卫士等)

线程: 

一个进程之内可以分为一到多个线程。

一个线程就是一个指令流,将指令流中的一条条指令以一定的顺序交给CPU执行

Java中,线程作为最小调度单位,进程作为资源分配的最小单位。在windows中进程是不活动的,只是作为线程的容器

 

二、并行和并发的区别? 

并发是指系统具有处理多个任务的能力,但这并不意味着这些任务同时执行。在单核CPU的环境下,CPU通过在任务之间迅速切换(上下文切换),给人一种似乎是同时处理多个任务的错觉。因此,并发关注的是多个任务的启动、执行和完成的顺序,使得多个任务看似在“同时”执行,实际上从宏观角度是的,但从微观角度看,这些任务可能并没有在同一时刻被处理。

 

并行处理是指多个处理器或多核处理器同时处理多个任务。在这种情况下,任务确实是在同一时刻被执行。并行执行的目的是通过同时使用多个计算资源来减少程序的执行时间。它适用于那些可以被分解为可以独立执行的多个子任务的问题。

简单来说:

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

3.1、继承Thread类

3.2、实现Runnable接口

3.3、实现Callable接口

3.4、线程池

四、Runnable和Callable的区别?

五、在启动线程的时候,可以使用run方法吗?run()和start()有什么区别?

六、线程包含了哪些状态?状态之间是如何变化的?

线程的状态可以参考JDK中的Thread类中的枚举State

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

八、notify和notifyAll有什么区别?

九、Java中wait方法和sleep方法有什么不同?

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

十一、synchronized关键字的底层原理

十二、Monitor实现的锁属于重量级锁。你了解过锁升级吗?

十三、谈谈JMM(Java内存模型)

十四、CAS

CAS全程是:Compare And Swap(比较再交换),它体现的一种乐观锁的思想,在无锁情况下保证线程操作共享数据的原子性。

 

在JUC包下实现的很多类都用到了CAS操作

比如:  AbstractQueuedSynchronizer(AQS框架)、AtomicXXX类

CAS数据交换流程: 

一个当前内存值V、旧的预期值A、即将更新的值B,当且仅当旧的预期值A和内存值V相同时,将内存值修改为B并返回ture,否则什么都不做,并返回false。如果CAS操作失败,通过自旋的方式等待并再次尝试,直到成功

十五、乐观锁和悲观锁 

乐观锁:

它假设不会产生冲突,先去尝试执行某项操作,失败了再进行其他处理(一般都是不断循环重试)。这种锁不会阻断其他线程,也不涉及上下文切换,性能开销小。代表实现是:CAS

悲观锁:

它假设一定会发生冲突,因此获取到锁之后会阻塞其他等待线程。这样做的好处是简单安全,但是挂起线程和回复线程都需要转入内核态进行,这样做的话会带来很大的性能开销。悲观锁的代表是synchronized。然而在真实环境中,大部分时候都不会产生冲突。

十六:谈谈你对volatile的理解 

总结:

十七、AQS 

全称是 AbstractQueueSynchronizer,即抽象队列同步器。它是构建锁或者其他同步组件的基础框架

AQS基本工作机制: 

在AQS内部有一个属性state,这个state就相当于一个资源,默认是0(无锁状态),如果队列中的有一个线程修改成功了state为1,则当前线程就相当于获取了资源

QS内部维护了一个先进先出的双向队列,队列中存储的排队的线程

在对state修改的时候使用的CAS操作,保证多个线程修改的情况下原子性

AQS可以是公平锁,也可以是非公平锁

公平锁是指各个线程在加锁前先检查有无排队的队列,按排队顺序取获得锁。(新的线程到队列中等待,只让队列中的head线程获取锁,是公平锁)

非公平锁是指线程加锁前不考虑排队问题,直接尝试获取锁,获取不到再去队尾排队。值得注意的是,在AQS的实现中,一旦线程进入排队队列,即使是非公平锁,线程也需要乖乖排队(新的线程与队列中的线程共同来抢资源,是非公平锁)

 十八、ReentrantLock的实现原理

ReentrantLock 内部有两个内部类,分别是 FairSync 和 NonFairSync,对应公平锁和非公平锁。他们都继承自 Sync。Sync 又继承自AQS。

总结:

十九、synchronized和Lock有什么区别?

二十、死锁产生的条件?

二十一、如何进行死锁诊断?

二十二、ConcurrentHashMap

总结:

二十三、Java程序中怎么保证多线程的执行安全?(导致并发程序出现问题的根本原因是什么)

volatile加在共享变量上!!

总结:

二十四、线程池的核心参数(线程池的执行原理)

二十五、线程池中有哪些常见的阻塞队列

二十六、如何确定核心线程数

二十七、线程池的种类有哪些

总结:

二十八、为什么不建议Executors创建线程池

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

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

相关文章

Rocky Linux安装与基础配置

目录 背景与起源 主要特点 目标用户 发展前景 下载 安装 常用配置命令: 更换镜像源 Rocky Linux 是一个开源的、由社区驱动的操作系统,旨在使用 Red Hat Enterprise Linux(RHEL)源码构建的下游二进制兼容发行版。以下是关于…

Ubuntu22.04之解决:terminal使用alt+1/alt+2/alt+3失效问题(二百三十八)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

2024050401-重学 Java 设计模式《实战代理模式》

重学 Java 设计模式:实战代理模式「模拟mybatis-spring中定义DAO接口,使用代理类方式操作数据库原理实现场景」 一、前言 难以跨越的瓶颈期,把你拿捏滴死死的! 编程开发学习过程中遇到的瓶颈期,往往是由于看不到前进…

趣测小程序开发搭建,趣测趣玩小程序是何物?

一、趣测小程序简介 趣测趣玩小程序是一款提供趣味测试和玩乐功能的应用程序。用户可以通过该小程序参与各种有趣的测试,这些测试可能涵盖性格、情感、智力等多个方面,旨在为用户提供轻松愉快的体验。同时,该小程序还可能包含一些游戏元素&a…

Spring boot 随笔 1 DatasourceInitializer

0. 为啥感觉升级了 win11 之后,电脑像是刚买回来的,很快 这篇加餐完全是一个意外:时隔两年半,再看 Springboot-quartz-starter 集成实现的时候,不知道为啥我的h2 在应用启动的时候,不能自动创建quartz相关…

Vue3项目炫酷实战,检测密码强度值

在前端项目开发中,确保用户密码的强度是保护账户安全的重要措施。本文将演示如何使用Vue 3实现一个简单的密码强度检测功能。通过实时反馈,帮助用户创建更安全的密码,从而提升整体系统的安全性。无论您是前端开发新手还是经验丰富的开发者&am…

Vue2指令

本节目标 掌握vue指令 定义常用指令案例-小黑记事本指令修饰符 介绍 指令就是带有v-前缀的标签属性, 不同的指令, 可以实现不同的功能 常用指令 渲染指令 语法: v-html 动态渲染标签作用: 动态设置元素的innerHTML场景: 用来动态解析标签 语法: v-text 动态渲染文本会…

气膜羽毛球馆如何提升运动体验—轻空间

随着人们对健康和运动的关注度日益增加,羽毛球作为一项受欢迎的运动,得到了越来越多人的喜爱。而气膜羽毛球馆,以其独特的优势,正在改变传统羽毛球馆的运动体验。那么,气膜羽毛球馆是如何提升运动体验的呢?…

神经网络 torch.nn---Non-Linear Activations (ReLU)

ReLU — PyTorch 2.3 documentation torch.nn - PyTorch中文文档 (pytorch-cn.readthedocs.io) 非线性变换的目的 非线性变换的目的是为神经网络引入一些非线性特征,使其训练出一些符合各种曲线或各种特征的模型。 换句话来说,如果模型都是直线特征的…

C#之EntityFramework的应用

目录 1,名词概述。 2,实体数据模型EDM介绍。 3,规范函数。 4,查看Linq转换成的SQL语句。 5,数据的增删改查。 5.1,数据查询 5.2,数据插入 5.3,数据更新 5.4,数据…

【android】设置背景图片

改变值&#xff0c;可显示zai在 在theves下面的两个value都要增加名字代码 <item name"windowActionBar">false</item><item name"android:windowNoTitle">true</item><item name"android:windowFullscreen">tru…

Base64前端图片乱码转换

title: Base64码乱转换 date: 2024-06-01 20:30:28 tags: vue3 后端图片前端显示乱码 现象 后端传来一个图片&#xff0c;前端能够接收&#xff0c;但是console.log()后发现图片变成了乱码&#xff0c;但是检查后台又发现能够正常的收到了这张图片。 处理方法 笔者有尝试将…

联想Y410P跑大模型

安装vs 2017 查看GPU版本 查看支持哪个版本的cuda windows cuda更新教程_cuda 12.0-CSDN博客 下载并安装cuda tookit 10.1 CUDA Toolkit 10.1 Update 2 Archive | NVIDIA Developer 找到下载的文件&#xff0c;安装 参考安装链接 Win10 Vs2017 CUDA10.1安装&#xff08;避坑…

【C语言】10.C语言指针(4)

文章目录 1.回调函数是什么&#xff1f;2.qsort 使⽤举例2.1 使⽤qsort函数排序整型数据2.2 使⽤qsort排序结构数据 3.qsort函数的模拟实现 1.回调函数是什么&#xff1f; 回调函数就是一个通过函数指针调用的函数。 如果你把函数的指针&#xff08;地址&#xff09;作为参数…

kafka-消费者-指定offset消费(SpringBoot整合Kafka)

文章目录 1、指定offset消费1.1、创建消费者监听器‘1.2、application.yml配置1.3、使用 Java代码 创建 主题 my_topic1 并建立3个分区并给每个分区建立3个副本1.4、创建生产者发送消息1.4.1、分区0中的数据 1.5、创建SpringBoot启动类1.6、屏蔽 kafka debug 日志 logback.xml1…

服务器数据恢复—EqualLogic存储硬盘灯亮黄色的数据恢复案例

服务器数据恢复环境&#xff1a; 一台某品牌EqualLogic PS 6011型号存储&#xff0c;底层有一组由16块SAS硬盘组建的RAID5阵列&#xff0c;上层存储空间划分了4个卷&#xff0c;格式化为VMFS文件系统&#xff0c;存放虚拟机文件。 服务器故障&#xff1a; 存储设备上两块硬盘指…

基于STC89C52单片机空气PM2.5系统设计资料

#include <reg52.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned char //宏定义sbit RSP1^6;//液晶接口sbit ENP1^7;sbit LED P2^0;//粉尘传感器控制接口sbit ADCS P3^7;//AD0832接口sbit ADCLK P3^5;sbit ADDI P3^6;sbit ADDO P3^6;…

【大模型】基于Hugging Face调用及微调大模型(1)

文章目录 一、前言二、Transformer三、Hugging Face3.1 Hugging Face Dataset3. 2 Hugging Face Tokenizer3.3 Hugging Face Transformer3.4 Hugging Face Accelerate 四、基于Hugging Face调用模型4.1 调用示例4.2 调用流程概述4.2.1 Tokenizer4.2.2 模型的加载4.2.3 模型基本…

# RocketMQ 实战:模拟电商网站场景综合案例(二)

RocketMQ 实战&#xff1a;模拟电商网站场景综合案例&#xff08;二&#xff09; 一、SpringBoot 整合 Dubbo &#xff1a;dubbo 概述 1、dubbo 概述 Dubbo &#xff1a;是阿里巴巴公司开源的一款高性能、轻量级的 Java RPC 框架&#xff0c;它提供了三大核心能力&#xff1a…

【WP】猿人学15_备周则意怠_常见则不疑

https://match.yuanrenxue.cn/match/15 抓包分析 抓包分析有一个m参数&#xff0c;三个数字组成 追栈/扣代码 根据启动器顺序追栈&#xff0c;一般优先跳过 jQuery 直接能找到加密函数 每次获取的数字都不一样 window.m function() { t1 parseInt(Date.parse(new Date(…