java面试题-JUC基础类介绍

news2024/9/20 9:05:12

1.JUC框架包含几个部分?

五个部分:

  • Lock框架和Tools类(把图中这两个放到一起理解)

  • Collections: 并发集合

  • Atomic: 原子类

  • Executors: 线程池

2.Lock框架和Tools哪些核心的类?

  1. Lock接口:用于提供比synchronized更加灵活和高级的线程同步控制,支持公平/非公平锁、可中断的获取锁、超时获取锁等功能。

  1. ReentrantLock类:Lock接口的主要实现类,提供与synchronized类似的功能,但更加灵活,支持公平/非公平锁、可重入性、可中断的获取锁、超时获取锁等功能。

  1. ReadWriteLock接口:提供读写锁的支持,用于控制多个线程对共享数据的读写操作。

  1. ReentrantReadWriteLock类:ReadWriteLock接口的主要实现类,提供读写锁的功能,支持可重入性,同时支持多个线程同时读取共享数据,但只允许一个线程进行写操作。

  1. Condition接口:用于在锁的基础上更加灵活地控制线程的等待和唤醒操作。

  1. ReentrantLock.ConditionObject类:Condition接口的主要实现类,提供了等待和唤醒操作所需要的一系列方法。

  1. Semaphore类:用于控制同时访问某个资源的线程数,可以用于实现资源池的管理等功能。

  1. CountDownLatch类:用于控制多个线程的同步,可以让一个或多个线程等待其他线程执行完毕后再继续执行。

  1. CyclicBarrier类:用于控制多个线程的同步,可以让多个线程在同一时刻到达同一个屏障点,然后继续执行。

  1. Phaser类:用于控制多个线程的同步,支持多个阶段的同步,可以让多个线程在同一阶段结束后进入下一阶段,直到所有阶段都完成后才继续执行。

3.JUC并发集合哪些核心的类?

  1. ConcurrentHashMap:线程安全的哈希表,与 Hashtable 不同的是,它采用分段锁技术实现线程安全,多个线程可以同时访问不同的分段,从而大大提高了并发性能。

  1. CopyOnWriteArrayList:线程安全的 ArrayList,基于“写时复制”技术实现,当有新元素添加到集合时,先将原始数据复制一份,然后在新的集合上添加新元素,最后用新集合替换旧集合。

  1. CopyOnWriteArraySet:线程安全的 Set,基于 CopyOnWriteArrayList 实现,采用“写时复制”技术,保证了并发访问的安全性。

  1. ConcurrentLinkedQueue:非阻塞队列,基于链表实现,支持高并发、高吞吐量的队列操作。

  1. ConcurrentSkipListMap:跳表实现的 Map,线程安全,支持高并发、高吞吐量的并发操作。

  1. ConcurrentSkipListSet:跳表实现的 Set,线程安全,支持高并发、高吞吐量的并发操作。

  1. BlockingQueue:阻塞队列的接口,继承了 Queue 接口,提供了在队列已满或已空时的阻塞操作。

  1. ArrayBlockingQueue:有界阻塞队列,底层基于数组实现,当队列已满时,put 操作会阻塞;当队列已空时,take 操作会阻塞。

  1. LinkedBlockingQueue:基于链表实现的阻塞队列,可以指定容量,当队列已满时,put 操作会阻塞;当队列已空时,take 操作会阻塞。

  1. PriorityBlockingQueue:基于优先级的无界阻塞队列,元素按照优先级从高到低排序,当队列为空时,take 操作会阻塞。

4.JUC原子类哪些核心的类?

JUC原子类是一组以原子方式更新基本数据类型的类,其中包含了很多核心的类,其中最常用的包括:

  1. AtomicInteger系列:提供原子性的int类型操作,包括:AtomicInteger、AtomicIntegerArray、AtomicIntegerFieldUpdater。

  1. AtomicLong系列:提供原子性的long类型操作,包括:AtomicLong、AtomicLongArray、AtomicLongFieldUpdater。

  1. AtomicBoolean:提供原子性的boolean类型操作。

  1. AtomicReference系列:提供原子性的对象类型操作,包括:AtomicReference、AtomicReferenceArray、AtomicReferenceFieldUpdater。

  1. AtomicStampedReference:提供原子性的带版本号的对象引用类型操作,可以防止ABA问题。

  1. AtomicMarkableReference:提供原子性的带标记位的对象引用类型操作,可以在对象引用的同时维护一个boolean类型的标记位。

这些原子类都是通过一些底层的机制来保证操作的原子性和可见性,比如利用CAS操作,利用volatile关键字等。在多线程环境下,使用这些原子类能够提高程序的并发性能和可靠性。

5.JUC线程池哪些核心的类?

JUC线程池主要包括以下核心的类:

  1. Executor 接口:定义了一个用于执行任务的方法 void execute(Runnable command),是线程池的顶级接口。

  1. ExecutorService 接口:继承了 Executor 接口,定义了一些常用的线程池操作方法,例如提交任务、关闭线程池等。

  1. ThreadPoolExecutor 类:是线程池的实现类,可以通过构造函数自定义线程池的各种参数,例如核心线程数、最大线程数、队列容量、线程工厂等。该类继承了 AbstractExecutorService 抽象类,实现了 ExecutorService 接口。

  1. ScheduledExecutorService 接口:继承了 ExecutorService 接口,定义了延迟执行和周期执行任务的方法。

  1. ScheduledThreadPoolExecutor 类:是线程池的实现类,可以通过构造函数自定义线程池的各种参数,例如核心线程数、最大线程数、队列容量、线程工厂等。该类继承了 ThreadPoolExecutor 类,实现了 ScheduledExecutorService 接口。

JUC 线程池的核心类可以通过自定义参数,灵活地创建和管理线程池,提高系统性能和资源利用率。

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

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

相关文章

<Linux>vscode搭建Linux远程开发工具

一、下载vscode😃可以去vscode的官网下载,不过是外网下载速度较慢提速可以参考:(81条消息) 解决VsCode下载慢问题_vscode下载太慢_wang13679201813的博客-CSDN博客官网:Visual Studio Code - Code Editing. Redefined这里推荐的是…

【自然语言处理】【大模型】GLM-130B:一个开源双语预训练语言模型

GLM-130B:一个开源双语预训练语言模型《GLM-130B: An open bilingual pre-trained model》论文:https://arxiv.org/pdf/2210.02414.pdf 相关博客 【自然语言处理】【大模型】GLM-130B:一个开源双语预训练语言模型 【自然语言处理】【大模型】…

拼多多出评软件工具榜单助手使用教程

软件使用教程下载软件前,关闭电脑的防火墙,退出所有杀毒软件,防止刷单软件被误删桌面建立一个文件夹,下载下来的安装包放进去,解压到当前文件夹,使用过程中别打开防火墙、杀毒软件。打开软件后,…

移动WEB开发五、响应式布局

零、文章目录 文章地址 个人博客-CSDN地址:https://blog.csdn.net/liyou123456789个人博客-GiteePages:https://bluecusliyou.gitee.io/techlearn 代码仓库地址 Gitee:https://gitee.com/bluecusliyou/TechLearnGithub:https:…

SAP FICO 理解业务范围的概念

业务范围 以前转载过几篇关于业务范围的文章: SAP Business Area 业务范围_SAP剑客的博客-CSDN博客_sap 业务范围 SAP FI 系列 002:业务范围派生_stone0823的博客-CSDN博客_sap 业务范围 http://blog.sina.com.cn/s/blog_3f2c03e30102w9yz.html 仍是…

虹科新品 | 最高80W!用于大基板紫外曝光系统的高功率UVLED光源

光刻曝光是指利用紫外光源将胶片或其他透明物体上的图像信息转移到涂有光敏材料(光刻胶)表面以得到高精度和极细微图案的一种制作工艺,主要用于半导体生产、高精密集成电路、PCB板制造、MEMS等行业。光刻技术是半导体工业和集成电路是最为核心…

十一、项目实战一

项目实战一 需求 以 前后端不分离的方式实现学生的增删改查操作 学生列表功能 接口设计 url:/students/ 请求方法:get 参数: 格式:查询参数 参数名类型是否必传说明pageint否页码,默认为1sizeinit否每页数据条数默认为10n…

浅谈安科瑞电力智能运维在高速铁路电力系统的应用分析

摘 要:高速铁路电力智能运维管理系统采用终端感知层、系统网络层、系统平台层的三层网络架构模式,通过集成网关,共享通信传输设备,利用铁路专用运维传输网络通道将各类监测数据上传至运维管理平台数据进行实时分析,建…

k8s二进制部署

目录 一、K8S常见的部署方式 1.1 K8S常见的部署方式 1.2 k8s部署 二进制与高可用的区别 二、Kubernetes二进制部署 2.1 Kubernetes二进制部署准备 ① 服务器准备 ② 签发证书环境准备 2.2 操作系统初始化配置 2.3 部署 etcd 集群 ① 在 master01 节点上操作 ② work…

使用Fabric.js实现贝塞尔曲线波浪特效

一、前言 本文是在此基础上收到启发然后进行的变化,当然,观看与否不会影响接下来的阅读体验。 二、实现思路 其实整个波浪动画其实可以看成:在相对坐标系静止的视角下,一个正弦函数在直角坐标系上匀速平移时我们所观察到的效果…

如何防止订单重复提交

如何防止订单重复提交前言什么是重复下单为什么会重复下单?如何处理重复下单?利用数据库实现幂等利用Redis防重前言 最近在做电商项目,整理一下解决方案并帮助自己巩固知识点,此方案是结合了目前的业务环境,若有更好的…

Linux进程概念讲解

1、进程的基本概念在给进程下定义之前,我们先了解一下进程:我们在编写完代码并运行起来时,在我们的磁盘中会形成一个可执行文件,当我们双击这个可执行文件时(程序时),这个程序会加载到内存中&am…

中央计算平台「上车」加速

随着英伟达、高通宣布在2024年开始陆续交付中央计算平台,Tier1正在跨域联合,以寻求在新的行业周期获得先发优势。 本月初,韩国LG电子宣布与高通达成合作协议,在原有座舱计算平台基础上,进一步拓展至智能驾驶领域。而在…

Transformer架构理解

参考: 1. Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Łukasz Kaiser, and Illia Polosukhin. 2017. Attention is all you need. In Proceedings of the 31st International Conference on Neural Information Pr…

Java 语法糖详解

本文从 Java 编译原理角度,深入字节码及 class 文件,抽丝剥茧,了解 Java 中的语法糖原理及用法,帮助大家在学会如何使用 Java 语法糖的同时,了解这些语法糖背后的原理。 什么是语法糖? 语法糖&#xff08…

金三银四一口气拿下三个offer的软件测试面试宝典,面试必看

说说你们怎么做接口自动化测试的☆☆☆☆☆ 我们是使用pythonrequesunittest来搭建我们的做接口自动化测试框架,使用python语言来调用第三方的类库requests来根据我们接口方法get或者post来发送接口请求,接收响应回来的数据进行适当的格式转换&#xff…

Python+Requests+PyTest+Excel+Allure 接口自动化测试实战

--------UnitTest框架和PyTest框架的简单认识对比与项目实战-------- 定义: Unittest是Python标准库中自带的单元测试框架,Unittest有时候也被称为PyUnit,就像JUnit是Java语言的标准单元测试框架一样,Unittest则是Python语言的标…

Python爬虫进阶 - win和linux下selenium使用代理

目录 Windows selenium配置 下载地址 Chrome Chromedriver 版本对应关系 实践测试 操作元素 浏览器操作 获取元素信息 鼠标操作 实战demo selenium添加代理 Linux selenium配置 检查服务器环境 下载安装第三方库(最简单版) 实践测试 代码…

【2.20】动态规划 +项目 + 存储引擎

01背包问题 现有一容量为w的背包,有3个物品,每个物品重量不同,价值不同,问,怎样装才能价值最大化? 明确dp数组含义和下标含义:dp[j]表示当前背包的最大价值。j表示背包容量。递推公式&#xf…

【期末复习】例题说明Prim算法与Kruskal算法

点睛Prim与Kruskal算法是用来求图的最小生成树的算法。最小生成树有n个顶点,n-1条边,不能有回路。Prim算法Prim算法的特点是从个体到整体,随机选定一个顶点为起始点出发,然后找它的权值最小的边对应的另一个顶点,这两个…