2023年Java核心技术面试第九篇(篇篇万字精讲)
目录
十七 . 并发相关基础概念
17.1 线程安全
17.2 保证线程安全的两个方法
17.2.1 封装
17.2.2 不可变
17.2.2.1 final 和 immutable解释
17.3 线程安全的基本特性
17.3.1 原子性(Atomicity)
17.3.2 可见性(Visibility)
17.3.3 有序性
17.3.4 互斥性
十七 . 并发相关基础概念
可能前面几讲,一些同学理解可以有一些困难,这一篇将进行一些并发相关概念比较模糊,我们将进行并发相关概念的补充,
17.1 线程安全
线程安全就是在多线程的环境下正确的一个概念,保证在多线程的环境下是实现共享的,可修改的状态是正确性,状态可以类比为程序里面的数据。
如果状态不是共享的,或者不是可修改的,就不存在线程安全的问题。
17.2 保证线程安全的两个方法
17.2.1 封装
进行封装,我们将对象内部的状态隐藏,保护起来。
17.2.2 不可变
可以进行final和immutable进行设置。
17.2.2.1 final 和 immutable解释
final 和 immutable 是 Java 中用来描述对象特性的关键字。
-
final:用于修饰变量、方法和类。它的作用如下:- 变量:
final修饰的变量表示该变量是一个常量,不可再被修改。一旦赋值后,其值不能被改变。通常用大写字母表示常量,并在声明时进行初始化。 - 方法:
final修饰的方法表示该方法不能被子类重写(覆盖)。 - 类:
final修饰的类表示该类不能被继承。
- 变量:
-
immutable:指的是对象一旦创建后,其状态(数据)不能被修改。不可变对象在创建后不可更改,任何操作都不会改变原始对象的值,而是返回一个新的对象。
不可变对象的主要特点包括:
- 对象创建后,其状态无法更改。
- 所有字段都是
final和私有的,不可直接访问和修改。 - 不提供可以修改对象状态的公共方法。
不可变对象的优点包括:
- 线程安全:由于对象状态不可更改,因此多线程环境下不需要额外的同步措施。
- 缓存友好:不可变对象的哈希值不会改变,因此可以在哈希表等数据结构中获得更好的性能。
17.3 线程安全的基本特性
17.3.1 原子性(Atomicity)
指的是一系列操作要么全部执行成功,要么全部失败回滚。即一个操作在执行过程中不会被其他线程打断,保证了操作的完整性。
17.3.2 可见性(Visibility)
指的是当一个线程修改了共享变量的值后,其他线程能够立即看到最新的值。需要通过使用 volatile 关键字、synchronized 关键字、Lock 接口等机制来确保可见性。
17.3.3 有序性
指的是程序执行的顺序与预期的顺序一致,不会受到指令重排序等因素的影响。可以通过 volatile 关键字、synchronized 关键字、Lock 接口、happens-before 原则等来保证有序性。
17.3.4 互斥性
指的是同一时间只允许一个线程对共享资源进行操作,其他线程必须等待。可以通过使用 synchronized 关键字、Lock 接口来实现互斥性。
相关文章:
2023年Java核心技术面试第九篇(篇篇万字精讲)
目录 十七 . 并发相关基础概念 17.1 线程安全 17.2 保证线程安全的两个方法 17.2.1 封装 17.2.2 不可变 17.2.2.1 final 和 immutable解释 17.3 线程安全的基本特性 17.3.1 原子性(Atomicity) 17.3.2 可见性(Visibility) 17.3.3 有…...
解码Python JSON:从基础到高级,掌握使用的精髓
摘要: JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,在Python中通过json模块可以方便地处理JSON数据。本文将从JSON的基础概念讲解开始,逐步深入介绍json模块的各种功能和用法,带您从入门到…...
Qt --- 自定义工具类 持续更新... ...
QSettings使用 .h文件 #ifndef UTIL_H #define UTIL_H#include <QSettings>class Util {public:// 配置文件读写 {{static bool writeInit(QString path, QString user_key, QString user_value);static bool readInit(QString path, QString user_key, QString &u…...
GO语言圣经 第二章习题
练习2.1 向tempconv包添加类型、常量和函数用来处理Kelvin绝对温度的转换,Kelvin 绝对零度是−273.15C,Kelvin绝对温度1K和摄氏度1C的单位间隔是一样的。 conv.go package tempconv// CToF converts a Celsius temperature to Fahrenheit. func CToF(c …...
Java 语言实现线性查找算法
【引言】 线性查找算法是一种简单且直观的查找算法。它从数组的第一个元素开始逐个比较,直到找到目标元素,或者遍历完整个数组。本文将使用Java语言实现线性查找算法,并详细讲解其思想和代码实现。 【算法思想】 线性查找的核心思想是逐个比…...
xcode15 change
jump to define 由原先的 control command left click 改为command left click 可以方便使用TODO // TODO: 是不是这里要改成红色字体 将这个直接作为bookmark...
MySQL集群(mysql-cluster)
环境 系统环境:centos7 管理节点:192.168.127.128 数据节点:192.168.127.145,192.168.127.146 sql节点:192.168.127.145,192.168.127.146 约定 创建mysql用户,将程序部署到/home/mysql 目…...
基于神经网络的3D地质模型
地球科学家需要对地质环境进行最佳估计才能进行模拟或评估。 除了地质背景之外,建立地质模型还需要一整套数学方法,如贝叶斯网络、协同克里金法、支持向量机、神经网络、随机模型,以在钻井日志或地球物理信息确实稀缺或不确定时定义哪些可能是…...
Spring AOP教程_编程入门自学教程_菜鸟教程-免费教程分享
教程简介 AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容…...
1.linux的常用命令
目录 一、Linux入门 二、Linux文件系统目录 三、Linux的vi和vim的使用 四、Linux的关机、重启、注销 四、Linux的用户管理 五、Linux的运行级别 六、Linux的文件目录指令 七、Linux的时间日期指令 八、Linux的压缩和解压类指令 九、Linux的搜索查找指令 …...
XiaoFeng.Net 网络库使用
网络库介绍 XiaoFeng.Net网络库包含了 SocketServer,SocketClient,WebSocketServer,WebSocketClient四个类库 SocketServer 网络服务端同时支持Socket客户端连接,WebSocket客户端,浏览器WebSocket连接 SocketCleint 网络客户端 WebSocketServer WebSock…...
【ES6】—数组的扩展
一、类数组/ 伪数组 1. 类/伪数组: 并不是真正意义的数组,有长度的属性,但无法使用Array原型上的方法 let divs document.getElementsByTagName(div) console.log(divs) // HTMLCollection []let divs2 document.getElementsByClassName("xxx&q…...
Android 实现资源国际化
前言 国际化指的是当Android系统切换语言时,相关设置也随之改变,从而使用不同的国家地区; 简而言之,就是我们的Android App中的文字和图片会随着不同国家的地区变化从而切换为不同语言文字和不同国家的图片 文字图片国际化 只要…...
uni、js——点击与禁用(不可点击)、动态样式class
案例 没约满的时间可以点击进行选择,约满的就不能选择了。选择完之后变色变字。 核心思想就是创建一个第三方变量存起来,点击谁就存到第三方,在根据这个进行判断。 代码 <template><view class"content"><view cl…...
分布式技术
分布式没有权威的技术,只有实践经验和积累的组件。常见的分布式技术有发号机制、分布式数据库、分布式数据库事物、基于Redis的分布式缓存、分布式会话、分布式安全认证。 1、发号机制 在数据库(关系数据库)中,主键往往是一条记…...
Consul的简介与安装
1、Consul简介 Consul是一套开源的分布式服务发现和配置管理系统,由HashiCorp公司用Go语言开发,Consul提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全方位的服…...
微服务框架 go-zero logx 日志组件剖析
addTenant api 和 rpc 的实现 上一篇我们说到咱们还剩下 addTenant 功能还未实现,不知道有没有兄弟感兴趣去实验一波的,本篇文章进行简要补充 根据上一篇文章分析,其实我们只需要执行如下几步即可: 编写 tenant.api,…...
基于Java+SpringBoot+Vue前后端分离图书电子商务网站设计和实现
博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…...
C# Winfrom通过COM接口访问和控制Excel应用程序,将Excel数据导入DataGridView
1.首先要创建xlsx文件 2.在Com中添加引用 3. 添加命名空间 using ApExcel Microsoft.Office.Interop.Excel; --这样起个名字方面后面写 4.样例 //点击操作excelDataTable dt new DataTable();string fileName "D:\desktop\tmp\test.xlsx";ApExcel.Application exA…...
Linux-tomcat环境搭建、jpress部署实践、nginx反向代理
♥️作者:小刘在C站 ♥️个人主页: 小刘主页 ♥️努力不一定有回报,但一定会有收获加油!一起努力,共赴美好人生! ♥️学习两年总结出的运维经验,以及思科模拟器全套网络实验教程。专栏…...
好用只是入场券,敢用才是护城河:企业级Agent如何进入真实业务
好用只是入场券 2026 年,小龙虾、OpenClaw、Hermes 等 Agent 产品接连出圈之后,很多企业开始重新审视一件事:AI 不再只是一个回答问题的工具,它正在变成可以接任务、调系统、走流程的数字执行单元。 这件事在演示里通常很顺。 一句…...
Pearcleaner:为什么这款开源工具是Mac用户清理应用残留的最佳选择?
Pearcleaner:为什么这款开源工具是Mac用户清理应用残留的最佳选择? 【免费下载链接】Pearcleaner A free, source-available and fair-code licensed mac app cleaner 项目地址: https://gitcode.com/gh_mirrors/pe/Pearcleaner 你是否曾注意到&a…...
【Flutter3.8x】flutter从入门到实战基础教程(一):新建一个flutter项目
初始化项目步骤 vscode中安装flutter插件ctrlshiftp弹出命令框点击flutter:new project系统会自动生成一个项目,其中会让选择一个文件夹存放源码,自行选择就行 启动安卓模拟器把文件定位在main.dart上,然后再点击这里如果启动失败,…...
动态阻抗匹配增益单元:破解脑电前端 “弱信号放大” 难题
通过上一篇文章的学习,相信大家对自研脑机接口模拟前端的整体框架有了一定的了解,其中动态阻抗匹配增益单元是解决 “微弱脑电信号无法稳定放大” 这一核心难题的关键。今天这篇文章,蔡哥就带大家来聊聊这项技术的设计背景、实现思路和实际效…...
3大核心功能让Windows 11重获新生:Win11Debloat系统优化实战指南
3大核心功能让Windows 11重获新生:Win11Debloat系统优化实战指南 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declut…...
在多模型间切换使用时对响应速度与一致性的感受
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在多模型间切换使用时对响应速度与一致性的感受 作为一名需要频繁调用大模型API的开发者,我的日常工作离不开与各类模型…...
Akagi麻雀助手:从新手到高手的实时AI指导伙伴
Akagi麻雀助手:从新手到高手的实时AI指导伙伴 【免费下载链接】Akagi 支持雀魂、天鳳、麻雀一番街、天月麻將,能夠使用自定義的AI模型實時分析對局並給出建議,內建Mortal AI作為示例。 Supports Majsoul, Tenhou, Riichi City, Amatsuki, wit…...
保姆级教程:用MATLAB R2019a搞定小波分析,从数据导入到等值线图绘制全流程
MATLAB小波分析实战:从数据清洗到可视化呈现的完整指南 小波分析作为时频域分析的利器,在信号处理、地球物理、生物医学等领域广泛应用。但对于刚接触MATLAB的研究生或数据分析师而言,如何将Excel中的原始数据一步步转化为专业的小波系数图和…...
甲言Jiayan:终极古汉语NLP解决方案,让文言文处理变得简单高效
甲言Jiayan:终极古汉语NLP解决方案,让文言文处理变得简单高效 【免费下载链接】Jiayan 甲言,专注于古代汉语(古汉语/古文/文言文/文言)处理的NLP工具包,支持文言词库构建、分词、词性标注、断句和标点。Jiayan, the 1st NLP toolk…...
探索OneMore:解锁OneNote高效笔记的完整指南
探索OneMore:解锁OneNote高效笔记的完整指南 【免费下载链接】OneMore A OneNote add-in with simple, yet powerful and useful features 项目地址: https://gitcode.com/gh_mirrors/on/OneMore OneMore是一款专为OneNote设计的强大插件,通过160…...
