高级java每日一道面试题-2024年7月30日-并发篇-你对同步器了解多少?

news2024/9/9 0:42:23

如果有遗漏,评论区告诉我进行补充

面试官: 你对同步器了解多少?

我回答:

在 Java 并发编程中,“同步器”通常指的是那些能够帮助我们实现线程间同步的工具或机制。Java 提供了多种同步器,其中最常用的就是 AbstractQueuedSynchronizer(简称 AQS),它是许多高级同步工具的基础,如 ReentrantLock, Semaphore, CountDownLatch 等。对同步器的了解是一个重要的考察点。同步器主要用于控制多个线程之间的同步和协作,确保线程以预定的顺序执行,从而避免并发问题,如数据竞争、死锁等。

同步器概述

同步器是 Java 并发包 java.util.concurrent 中的一个抽象类,用于构建锁和其他同步组件的基本框架。AQS 使用一个整型的共享变量来代表同步状态,并通过一个 CLH(Craig-Landin-Baker)队列来管理等待的线程。

除了AQS的其他同步器

详细的AQS使用和问题见文章: https://blog.csdn.net/qq_43071699/article/details/140761055

除了 AQS,Java 还提供了其他类型的同步器,例如:

  1. Phaser(动态阶段同步器)

    • 概述:Phaser是JDK 7中引入的一个更为高级的同步器,它提供了比CyclicBarrier和CountDownLatch更灵活的控制能力。Phaser可以动态地管理参与者的数量,并且支持在屏障点执行自定义的回调操作。
    • 方法arriveAndAwaitAdvance()(到达并等待屏障点)、register()(注册新的参与者)、arrive()(参与者到达)等。
    • 应用场景:适用于需要动态调整参与者数量,并在屏障点执行复杂逻辑的场景。
  2. Semaphore(信号量):

    • 概述:控制对有限资源的访问,允许多个线程同时访问资源。但总数不超过设定的最大值。可以创建固定数量的许可证。
    • 方法acquire()(获取一个许可)、release()(释放一个许可)、tryAcquire()(尝试获取许可,若无法获取则立即返回)等。
    • 应用场景:适用于控制同时访问某个资源的线程数量,如数据库连接池、线程池等。
  3. CountDownLatch(计数递减门闩):

    • 概述:CountDownLatch是一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。常用于初始化或启动时等待一组操作完成。
    • 方法countDown()(递减计数器)、await()(等待计数器到达零)等。
    • 应用场景:适用于等待多个线程完成某项操作后才能继续执行的场景,如启动一个服务前等待所有初始化操作完成。
  4. CyclicBarrier(循环栅栏):

    • 概述:CyclicBarrier是一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点(common barrier point)。在涉及一组固定大小的线程集的程序中,这些线程必须不时地互相等待,此时CyclicBarrier很有用。使线程等待其他线程到达某个屏障点。支持循环等待,即到达屏障点的线程会等待其他线程再次到达。
    • 方法await()(等待所有线程到达屏障点)、reset()(重置屏障到初始状态)等。
    • 应用场景:适用于多个线程需要相互等待,以便同时开始执行下一个阶段的场景,如并行计算中的任务分割与合并。
  5. Exchanger(交换器):

    • 概述:Exchanger是一个用于两个线程之间交换数据的同步辅助类。当两个线程都到达交换点时,它们交换各自持有的数据,然后继续执行。允许两个线程交换对象。通常用于实现线程间的双向通信。
    • 方法exchange(V x)(与另一个线程交换数据)等。
    • 应用场景:适用于两个线程需要交换数据的场景,如生产者-消费者模型中的数据交换。

同步器的使用注意事项

  1. 正确加锁:在使用同步器时,需要确保在正确的时机和范围内加锁,以避免死锁或性能下降。
  2. 避免过度同步:过度同步会导致性能下降,因此需要仔细评估哪些资源需要同步,以及同步的粒度。
  3. 考虑线程安全性:在设计使用同步器的系统时,需要考虑线程安全性,确保系统在多线程环境下能够正确运行。

总结

Java同步器是并发编程中不可或缺的工具,它们通过不同的机制来实现线程间的同步和协作。在面试中,了解并掌握这些同步器的原理和使用方法是非常重要的。同时,还需要注意同步器的使用场景和注意事项,以确保系统的正确性和性能。

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

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

相关文章

MySQL 性能调优

文章目录 一. MySQL调优金字塔1. 架构调优2. MySQL调优3. 硬件和OS调优4. 小结 二. 查询性能调优三. 慢查询1. 概念2. 优化数据访问3. 请求了不需要数据,怎么做4. 是否在扫描额外的记录5. 慢查询相关配置 & 日志位置6. 小结 四. 查询优化器五. 实现调优手段 一.…

24、Python之面向对象:责任与自由,私有属性真的有必要吗

引言 前面我们进一步介绍了类定义中属性的使用,今天我们对中关于属性私有化的话题稍微展开聊一下,顺便稍微理解一下Python设计的相关理念。 访问级别 在其他编程语言中,比如Java,关于类中的属性和方法通过关键字定义明确的访问级…

1、仓颉工程基础操作 cjpm

文章目录 1. 仓颉工程创建方式2. cjpm2.1 init 初始化工程2.2 run 运行工程 1. 仓颉工程创建方式 使用 cangjie studio 通过cangjie studio 创建 使用vscode插件 通过 VSCode 命令面板创建仓颉工程通过可视化界面创建仓颉工程 cjpm 注:具体使用参考官方文档&#…

探索分布式光伏运维系统的组成 需要几步呢?

前言 随着光伏发电的不断发展,对于光伏发电监控系统的需求也日益迫切,“互联网”时代,“互联网”的理念已经转化为科技生产的动力,促进了产业的升级发展,本文结合“互联网”技术提出了一种针对分散光伏发电站运行数据…

浅谈Devops

1.什么是Devops DevopsDev(Development)Ops(Operation) DevOps(Development和Operations的混合词)是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”…

asp.net mvc 三层架构开发商城系统需要前台页面代完善

一般会后端开发,都不太想写前台界面,这套系统做完本来想开源,需要前台界面,后台已开发,有需求的朋友,可以开发个前端界面完善一下,有的话可以私聊发给我啊

The Llama 3 Herd of Models 第6部分推理部分全文

第1,2,3部分 介绍,概览和预训练 第4部分 后训练 第5部分 结果 6 Inference 推理 我们研究了两种主要技术来提高Llama 3405b模型的推理效率:(1)管道并行化和(2)FP8量化。我们已经公开发布了FP8量化的实现。 6.1 Pipeline Parallelism 管道并行 当使用BF16数字表示模型参数时…

VirtualBox创建共享磁盘

VirtualBox创建共享磁盘 目录 VirtualBox创建共享磁盘1、划分共享磁盘1.1、【管理】->【工具】->【虚拟介质管理】1.2、【创建】->【VDI(VirtualBox 磁盘映像)】->【下一步】1.3、【预先分配全部空间】->【下一步】1.4、【分配大小】->…

5、springboot3 vue3开发平台-后端- satoken 整合

文章目录 1. 为什么使用sa-token2. 依赖导入jichu2.1 基础依赖引入2.2 redis整合2.3 redis 配置, 使redis能支持中文存储 3. 配置4. 配置使用4.1 权限加载接口实现, 登录实现4.2 配置全局过滤器4.3 登录异常处理 5. 登录测试6. 用户session的获取 1. 为什…

MySQL索引与存储引擎、事物

数据库索引 是一个排序的列表,存储着索引值和这个值所对应的物理地址 无须对整个表进行扫描,通过物理地址就可以找到所需数据 是表中一列或者若干列值排序的方法 需要额外的磁盘空间 类型 普通索引 最基本的索引类型,没有唯一性之类的限制 创…

图不连通怎么办?

目录 1.问题 2.连通的相关概念 3.解决方案 C语言示例实现: 1.问题 无论是图的深度还是广度遍历都是从图的某一条边往下走,那么被孤立的结点怎么被遍历到呢? 2.连通的相关概念 连通:如果从V到W存在一条(无向&#…

3D魔方游戏制作lua迷你世界

--3D魔方 --星空露珠工作室 --核心脚本来自负负 --1:xy 2:yx 3:xz 4:zx 5:yz 6:zy --4000,0-3 3995-0,3 local trn{ {{5,2},{3,1},{1,2},{1,3},{4,0},{2,2}}, {{3,0},{5,3},{1,3},{1,2},{2,3},{4,1}}, {{4,2},{2,1},{1,1},{1,0},{3,3},{5,1}}, {{2,0},{4,3},{1,0},{1,1},{5,0},…

Web3.js 4.x版本事件监听详解:从HTTP到WebSocket的迁移

项目场景 在一个使用以太坊区块链技术的项目中,需要监听智能合约的事件,以便在事件触发时能够及时响应。项目中使用了web3.js库的4.x版本,节点使用Geth启动,并通过HTTP与节点进行通信。 问题描述 合约DataStorage.sol文件已经定…

华为项目管理工具集

华为项目管理10大模板是一套被广泛认可和使用的项目管理工具集,它包含了在项目管理过程中常用的各种表格和文档模板。这些模板旨在帮助项目经理更有效地规划、执行和监控项目,确保项目的成功交付。 虽然具体的模板内容可能会有所不同,但根据…

51 单片机的Keil5软件

1. KEIL C51 软件获取 博主网盘下载:链接:https://pan.baidu.com/s/1YBfrRh2L7SIehS5xLQkAow?pwd4211 提取码:4211 也可以在 KEIL 的官网上下载:http:// https://www.keil.com/download/product/ 打开界面如下图所示&#xff1…

机器学习(二十三):决策树和决策树学习过程

一、决策树 下面是数据集,输入特征是耳朵形状、脸形状、是否有胡子,输出结果是是否为猫 下图是决策树,根据耳朵形状、脸形状、是否有胡子这几个特征,建立决策树,从根节点一步步预测结果。 上图中,每一个椭…

[硬件]—电感传感器

电感传感器 1.概述 工作基础:电磁感应,即利用线圈自感或互感的改变来实现非电量测量。工作原理: 被测物理量(非电量:位移、振动、流量);线圈自感系数L/互感系数M;电压或电流&#…

QT常用的控件(二)

QT的常用控件 一.按钮类控件1.1 Push Button代码示例: 带有图标的按钮代码示例: 带有快捷键的按钮代码示例: 按钮的重复触发 1.2 Radio Button代码示例: 选择性别代码示例: click, press, release, toggled 的区别代码示例: 单选框分组 1.3 Check Box代码示例: 获取复选按钮的取…

邮件攻击案例系列四:某金融企业遭遇撒网式钓鱼邮件攻击

案例描述 2023 年 3 月末,某知名投资公司业务经理李先生先后收到两封看似是来自邮件服务商和公司网络安全部门发出的邮件,标题是“紧急:邮箱安全备案更新通知”。邮件内容称,由于最近公司内部系统升级,所有员工必须重…

【微信小程序实战教程】之微信小程序的配置文件详解

小程序的配置文件 对于有过服务端开发的程序员来说,肯定对“约定优于配置”并不陌生,这是一种按约定编程的软件设计范式,目的在于减少软件开发者做决定的数量。而微信小程序正好与这种软件设计范式的理念相反,小程序是一种“配置…