当前位置: 首页 > news >正文

Java面试题之并发

并发

    • 1.并发编程的优缺点?
    • 2.并发编程三要素?
    • 3.什么叫指令重排?
    • 4.如何避免指令重排?
    • 5.并发?并行?串行?
    • 6.线程和进程的概念和区别?
    • 7.什么是上下文切换?
    • 8.守护线程和用户线程的定义?
    • 9.什么是线程死锁?
    • 10.形成死锁的四个条件?
    • 11.怎么避免死锁?
    • 12.创建线程的四种方式?
    • 13.runable和callable区别?
    • 14.run()和start()的区别?
    • 15.什么是futureTask?
    • 16.为什么我们调用start()方法会执行run()方法,为什么我们不能直接调用run()方法?
    • 17.线程生命周期及五种状态的转换?
    • 18.线程调度的几种模型?
    • 19.线程调度策略?
    • 20.什么是线程调度器和时间分片?
    • 21.wait、sleep、yield区别?notify、notifyAll区别?
    • 22.sleep、yield为什么是静态的?
    • 23.如何调用wait()?使用if块还是循环块?
    • 24.为什么线程通信方法wait()、notify()、notifyAll()定义在Object中?
    • 25.为什么wait()、notify()、notifyAll()必须在同步方法或者同步块中被调用?
    • 26.如何停止一个正在运行的线程?
    • 27.interrupt、interrupted和isInterrupt方法的区别?
    • 28.怎么唤醒阻塞线程?
    • 29.什么是阻塞式方法?
    • 30.实现线程同步的方法?
    • 31.同步方法和同步块是什么?
    • 32.线程池的工作原理?
    • 33.创建线程池都有哪些方式?
    • 34.线程池常用的几个参数?
    • 35.线程池的拒绝策略有哪些?
    • 36.线程池都有哪些状态?
    • 37.线程池中submit()和execute()的区别?
    • 38.当你提交任务时,线程池队列已满,这时会发生什么?
    • 39.synchronized使用方式?
    • 40.synchronized的锁升级的过程
    • 41.synchronized底层原理?
    • 42.什么是自旋?
    • 43.synchronized可重入的原理?
    • 44.synchronized和volicate区别?
    • 45.Lock和synchronized区别?
    • 46.synchronized和ReentrantLock可重入锁的区别?
    • 47. ReentrantLock是什么?
    • 48.synchronized为什么不能集群操作?如果想集群操作用什么?
    • 49.线程池用完扔回线程池是什么状态?
    • 50.CAS和ABA的问题?
    • 51.线程池的线程数是怎么确定的?
    • 52.ThredLocal是什么?以及使用场景?
    • 53.什么是临界区?
    • 53.ab同时提交线程完成任何一个就去执行C,用什么来完成?
    • 54.ab同时提交线程,需要判断结果,就去执行C,用什么来完成?
    • 55.CountDownLatch是什么?
    • 56.ExecutorService是什么?
    • 55.AQS简单介绍一下?
    • 55.CLH是什么?
    • 55.线程池的应用场景?
    • 54.为什么要使用并发编程?
    • 55.双重校验锁实现对象单例模式?
    • 56.多线程的应用场景?

1.并发编程的优缺点?

优点

  • 充分利用多核CPU的计算能力,通过并发编程的形式可以将多核CPU的计算能力发挥到极致,性能得到提升;
  • 方便业务拆分,提升系统并发能力和性能;

缺点

  • 内存泄漏;
  • 线程安全问题;
  • 复杂程度增加:比如死锁;
  • 资源消耗增加:比如频繁的上下文切换也可能导致额外的性能开销;

2.并发编程三要素?

  • 原子性:原子,就是一个不可再被分割的颗粒。原子性就是指一个或多个操作要么全部执行成功要么全部执行失败;
  • 可见性:一个线程对共享变量的修改,另一个线程能够立刻看到;
  • 有序性:程序执行的顺序按照代码先后顺序执行。(处理器可能会对指令进行重排序)

3.什么叫指令重排?

指令重排(也称为指令重排序)是指在程序执行过程中,指令的执行顺序可能与它们在代码中的顺序不一致的现象。编译器和处理器为了提高程序的执行效率,可能会根据一些规则和优化策略对指令进行重新排序。但是,这种重排序必须保证最终的执行结果与不进行重排时的执行结果保持一致,以确保程序的正确性;存在数据依赖关系的也不允许指令重排

指令重排主要是基于处理器的特性,如多级缓存、多核等,来优化指令的执行顺序。这种优化可以使程序在保证业务运行的同时,充分利用CPU的资源,发挥最大的性能。然而,指令重排也可能会导致线程安全问题,特别是在多线程环境下。因此,在编写并发程序时,需要特别注意指令重排的影响,并采取相应的措施来确保程序的正确性和性能。

4.如何避免指令重排?

  • 使用volatile关键字:在Java中,volatile关键字可以确保多线程环境下变量的可见性和有序性。当一个变量被声明为volatile时,它会禁止指令重排,确保所有线程看到的变量值都是一致的。volatile关键字还可以防止JVM的指令重排优化,确保代码的执行顺序与预期一致。
  • 使用synchronized关键字:synchronized关键字可以用来保证代码块或方法的原子性,即在同一时刻只能有一个线程执行被保护的代码。通过synchronized块或方法,可以确保指令按照预期的顺序执行,避免指令重排导致的线程安全问题。
  • 使用Lock接口及其实现类:Java中的Lock接口及其实现类(如ReentrantLock)也可以用来控制并发访问,保证代码的正确执行顺序。与synchronized相比,Lock接口提供了更灵活的控制方式,可以更好地避免指令重排带来的问题。
  • 避免使用final关键字修饰引用类型变量:在Java中,final关键字修饰的引用类型变量在初始化后不能被改变。但是,如果final变量指向的对象是可变的,那么其他线程仍然可以修改该对象的内容。因此,在使用final关键字时,需要特别注意避免指令重排导致的线程安全问题。
  • 了解并遵循Happens-Before规则:Happens-Before规则是Java内存模型定义的一组规则,用于确定多线程环境中哪些操作是有序的。遵循这些规则可以确保指令按照预期的顺序执行,避免指令重排导致的线程安全问题。

5.并发?并行?串行?

  • 并发:多个任务在同一个cpu上,按细分的时间片轮流执行,从逻辑上来看那些任务是同事执行的;(两个队列一台咖啡机)
  • 并行:单位时间内,多个处理器或

相关文章:

Java面试题之并发

并发 1.并发编程的优缺点?2.并发编程三要素?3.什么叫指令重排?4.如何避免指令重排?5.并发?并行?串行?6.线程和进程的概念和区别?7.什么是上下文切换?8.守护线程和用户线程的定义?9.什么是线程死锁?10.形成死锁的四个条件?11.怎么避免死锁?12.创建线程的四种方式?…...

Python GUI自动化定位代码参考

一、pyautogui原始逻辑 import pyautogui # 获取指定图片在屏幕上的位置 image_path path/to/image.png target_position pyautogui.locateCenterOnScreen(image_path) if target_position is not None: # 获取偏移量 offset_x 10 offset_y 10 # 计算实际点…...

11.网络游戏逆向分析与漏洞攻防-游戏网络架构逆向分析-接管游戏接收网络数据包的操作

内容参考于:易道云信息技术研究院VIP课 上一个内容:接管游戏发送数据的操作 码云地址(master 分支):https://gitee.com/dye_your_fingers/titan 码云版本号:8256eb53e8c16281bc1a29cb8d26d352bb5bbf4c 代…...

特斯拉一面算法原题

来自太空的 X 帖子 埃隆马斯克(Elon Musk)旗下太空探索技术公司 SpaceX 于 2 月 26 号,从太空往社交平台 X(前身为推特,已被马斯克全资收购并改名)发布帖子。 这是 SpaceX 官号首次通过星链来发送 X 帖子&a…...

【Leetcode每日一题】二分查找 - 山脉数组的峰顶索引(难度⭐⭐)(23)

1. 题目解析 Leetcode链接:852. 山脉数组的峰顶索引 这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。 核心在于找到题目中所说的峰值所在的下标并返回他们的下标即可。 2. 算法原理 峰顶及两侧数据特点分析 峰顶数据…...

Linux添加用户分组练习

一、复制/etc/skel目录为/home/tuser1(/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限)。 cp -a /etc/skel /home/tuser1 chown -R tuser1:tuser1 /home/tuser1 chmod -R 700 /home/tuser1 二、编辑/etc/group文件,添加组h…...

云快充充电桩系统设计书

充电桩系统设计书 一、系统设计概述 随着新能源汽车市场的快速发展,充电桩作为电动汽车的重要配套设施,其市场需求日益增长。本系统旨在提供一套稳定、高效、易用的充电桩解决方案,以满足市场上新能源充电桩的主流需求。通过实现云快充V1.6协…...

oracle DG 原理

在Oracle中,什么是DG?DG有哪些优缺点? DG(Data Guard,数据卫士)不是一个备份恢复的工具,然而,DG却拥有备份的功能,在物理DG下它可以和主库一模一样,但是它存…...

MySQL篇—持久化和非持久化统计信息介绍(第一篇,总共三篇)

☘️博主介绍☘️: ✨又是一天没白过,我是奈斯,DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、Linux,也在积极的扩展IT方向的其他知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章,并且也会默默的点赞收藏加关注❣…...

Leetcode—65. 有效数字【困难】

2024每日刷题&#xff08;118&#xff09; Leetcode—65. 有效数字 实现代码 class Solution { public:bool isNumber(string s) {if(s.empty()) {return false;}bool seenNum false;bool seenE false;bool seenDot false;for(int i 0; i < s.size(); i) {switch(s[i]…...

【Java程序设计】【C00322】基于Springboot的高校竞赛管理系统(有论文)

基于Springboot的高校竞赛管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的高校竞赛管理系统&#xff0c;本系统有管理员、老师、专家以及用户四种角色&#xff1b; 管理员&#xff1a;首页、个人中心、管…...

41、网络编程/TCP.UDP通信模型练习20240301

一、编写基于TCP的客户端实现以下功能&#xff1a; 通过键盘按键控制机械臂&#xff1a;w(红色臂角度增大)s&#xff08;红色臂角度减小&#xff09;d&#xff08;蓝色臂角度增大&#xff09;a&#xff08;蓝色臂角度减小&#xff09;按键控制机械臂 1.基于TCP服务器的机械臂…...

Python中操作MySQL和SQL Server数据库的基础与实战【第97篇—MySQL数据库】

Python中操作MySQL和SQL Server数据库的基础与实战 在Python中&#xff0c;我们经常需要与各种数据库进行交互&#xff0c;其中MySQL和SQL Server是两个常见的选择。本文将介绍如何使用pymysql和pymssql库进行基本的数据库操作&#xff0c;并通过实际代码示例来展示这些操作。…...

【兔子机器人】五连杆运动学解算与VMC(virtual model control)

VMC (virtual model control&#xff0c;虚拟模型控制) 是一种直觉控制方式&#xff0c;其关键是在每个需要控制的自由度上构造恰当的虚拟构件以产生合适的虚拟力。虚拟力不是实际执行机构的作用力或力矩&#xff0c;而是通过执行机构的作用经过机构转换而成。对于一些控制问题…...

学习鸿蒙基础(6)

一、Prop属性 父——>子 单向同步 Prop装饰的变量可以和父组件建立单向的同步关系。Prop装饰的变量是可变的&#xff0c;但是变化不会同步回其父组件。Prop装饰的变量和父组件建立单向的同步关系。Prop变量允许在本地修改&#xff0c;但修改后的变化不会同步回父组件。当父组…...

标准PoE交换机、非标准PoE交换机和非PoE交换机三者到底有何区别?

目录 前言&#xff1a; 一、标准PoE交换机 1.1 工作原理 1.2 应用场景 1、视频监控 2、无线接入点 3、IP电话 1.3 优势 1、简化布线 2、简化安装 3、提高可靠性 二、非标准PoE交换机 2.1 工作原理 2.2 应用场景 1、无线路由器 2、IP电话 3、数据中心 2.3 优势…...

【软件测试】--功能测试4-html介绍

1.1 前端三大核心 html:超文本标记语言&#xff0c;由一套标记标签组成 标签&#xff1a; 单标签&#xff1a;<标签名 /> 双标签:<标签名></标签名> 属性&#xff1a;描述某一特征 示例:<a 属性名"属性值"> 1.2 html骨架标签 <!DOC…...

模型优化_XGBOOST学习曲线及改进,泛化误差

代码 from xgboost import XGBRegressor as XGBR from sklearn.ensemble import RandomForestRegressor as RFR from sklearn.linear_model import LinearRegression as LR from sklearn.datasets import load_boston from sklearn.model_selection import train_test_split,c…...

Java8 - LocalDateTime时间日期类使用详解

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;Java全栈-专栏 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&…...

3D城市模型可视化:开启智慧都市探索之旅

随着科技的飞速发展&#xff0c;我们对城市的认知已经不再局限于平面的地图和照片。今天&#xff0c;让我们领略一种全新的城市体验——3D城市模型可视化。这项技术将带领我们走进一个立体、生动的城市世界&#xff0c;感受前所未有的智慧都市魅力。 3D城市模型通过先进的计算机…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

消防一体化安全管控平台:构建消防“一张图”和APP统一管理

在城市的某个角落&#xff0c;一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延&#xff0c;滚滚浓烟弥漫开来&#xff0c;周围群众的生命财产安全受到严重威胁。就在这千钧一发之际&#xff0c;消防救援队伍迅速行动&#xff0c;而豪越科技消防一体化安全管控平台构建的消防“…...

篇章二 论坛系统——系统设计

目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...

AD学习(3)

1 PCB封装元素组成及简单的PCB封装创建 封装的组成部分&#xff1a; &#xff08;1&#xff09;PCB焊盘&#xff1a;表层的铜 &#xff0c;top层的铜 &#xff08;2&#xff09;管脚序号&#xff1a;用来关联原理图中的管脚的序号&#xff0c;原理图的序号需要和PCB封装一一…...