java研发工程师必知必会

news/2026/1/23 22:08:58/文章来源:https://www.cnblogs.com/ladyM/p/19524156

java作为一种跨平台、面向对象的编程语言,广泛应用于企业级Web开发和移动应用开发。其核心特性包括可移植性(一次编写,到处运行)、安全性、分布式支持以及泛型编程能力。又因其简单易学深受广大程序员所喜爱。自1995年推出以来,语言也经历了多次的迭代更新,而对于一些较早接触该语言的老程序员来说,对一些新特征甚至语言层面的优化或许并不熟悉,针对一些较为常见的语言特征,在本文中进行了较为细致的入门介绍,希望能在学习语言的过程中起到积极的作用。另外由于水平有限,对某些特性的理解或许存在偏差,如果您发现有任何问题,欢迎随时交流学习。
## 1、volatile在线程安全中能保证什么

**
通常以为,使用volatile变量就可以保证线程安全.事实真的如此吗?
其实,volatile只能保障的是可见性和排序,并不能保证操作的原子性,更不能防止竞态条件(race conditions)的发生.当一个变量被标记为volatile时,1) 某线程对该变量的任何写入操作会立即对其他线程可见;2) 读写操作不会对该变量的相关操作进行重排序.
```java
volatile int i;
i++;
```
代码中变量i虽然使用volatile修饰,但其并不是线程安全的,因为i++不是一个原子操作,它包含1 读取数值;2 加1;3 写回数值.因volatile修饰变量不能保证原子性,当两个线程同时执行上述代码,便会导致线程安全的问题.
**
## 2、是否应该选择synchronized锁*
*
长久以来的认知告诉我们,synchronized速度慢,要避免使用.选用替代方案concurrent.lock包下的作为替代方案.从jdk1.6开始,针对synchronized的优化已经显著提高了其性能,jdk1.6引入了”锁升级”机制, 将锁的状态分为四种:‌无锁 → 偏向锁 → 轻量级锁 → 重量级锁‌。JVM 会根据线程竞争情况动态升级锁,避免不必要的开销.
许多情况下, synchronized由JVM优化,比手动锁定更快,语义也更容易理解.但当多个线程争用一个synchronized锁时,速度会变慢.如下代码中,如果doSomeThing()抛出异常,会发生什么情况?
```java
synchronized (lock) {
doSomeThing();
}
```
锁会自动释放!
同样如果使用手动锁,则必须注意锁释放.如使用ReentrantLock,需注意解锁某个finally区域,否则,一旦异常该区域将永远保持锁定状态,出现死锁.
```java
lock.lock ();
try {
doSomeThing ();
} finally {
lock.unlock () ;
}
```
**
## 3、可以使用Thread.sleep()协调线程吗

答案是否定的.因为Thread.sleep()并不能保证时间,不能协调状态,会在机器低速运转或重载时发生故障.想要正确的协调线程,需使用:
1、wait()/notify();
2、CountDownLatch;
3、CyclicBarrier;
4、CompletebleFuture.
那么,wait()和sleep()之间有什么区别呢?
其区别主要包括
1、sleep()不释放锁,线程将占用cpu资源,wait()会释放监视器锁,
2、sleep()可以在任何地方使用,而wait()必须在synchronized代码块/方法中使用
3、sleep()作用是暂停执行(休眠),而wait()作用是线程间通信
4、sleep()的唤醒条件是超时自动唤醒,而wait()需等待notify()或notifyAll()
用一个日常生活中的场景大致描述一下,sleep()类似于你在床上看书,看累了抱着书躺下睡觉,虽然你不再看书,但因为书被你抱着,其他人是没法去看你手中的书.wait()类似你去排队出地铁站,在出站前你发现手机支付地铁票有问题,于是你让出排队通道去修复地铁卡手机支付,其他人依次跟上排队出站,等你解决了支付问题,又重新排进了出站队伍中.
在系统中,特别是多线程系统中使用sleep()只会降低系统性能.
**
## 4、多线程环境中,双重检查一定是安全的吗?

**
以下代码,在多线程环境中,是否存在问题?
```java
public class MyClass {
private static MyClass instance;
public static MyClass getInstance() {
if (instance == null) {
synchronized (MyClass.class) {
if (instance == null) {
instance = new MyClass();
}
}
}
return instance;
}
}
```
答案是肯定的。问题的根本是因为指令重排的存在,而JVM在执行instance = new MyClass();这行代码时,其操作并不是原子的,通常分为三个步骤: •
• 1.分配内存空间:为对象分配一块内存。
• 2.初始化对象:在内存中构造对象(执行构造函数)。
• 3.引用赋值:将 instance 变量指向刚才分配的内存地址。
而JVM和CPU为了优化性能,这三个步骤并不是严格的顺序执行的.这便可能导致另一个线程可能会看到一个半初始化的对象.而修复此问题便可以通过使用添加volatile修饰禁止其重排序修复后代码如下
```java
public class MyClass {
// 必须增加 volatile 关键字
private static volatile MyClass instance;

public static MyClass getInstance() {
if (instance == null) {
synchronized (MyClass.class) {
if (instance == null) {
instance = new MyClass();
}
}
}
return instance;
}
}
```
**
## 5、Java对象创建经历哪些阶段?

**
Java对象创建的五个阶段——类加载检查、内存分配、零值初始化、对象头设置和执行<init>方法——在逻辑上是顺序执行的。这些步骤共同构成了Java虚拟机(JVM)实例化对象的过程,按照由前到后的顺序保证了对象在内存中的正确配置和初始化。
具体细节如下:
• 1. 类加载检查:虚拟机检查new指令的参数能否在常量池中定位到一个类的符号引用,并检查该类是否已加载、解析和初始化。
• 2. 内存分配:在类加载检查通过后,虚拟机为对象在堆中分配内存。
• 3. 零值初始化:将分配的内存空间初始化为零值(不包含对象头),保证字段在该阶段就能使用默认值。
• 4. 对象头设置:设置对象头,包括哈希码、GC分代年龄、锁状态标志等。
• 5. 执行<init>方法:执行开发者定义的构造函数,按照程序员的意愿对对象进行初始化。

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

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

相关文章

【笔记】【底层逻辑1】

目录 精读刘润《底层逻辑 1》:看透世界运转规律,少走人生弯路 一、 是非对错的底层逻辑:三种视角,三种答案 二、 分清人性、道德和法律:别混淆三者的边界 三、 人生的三层智慧:选择、定力、博弈 第一层智慧:选择 —— 先知道 “有的选”,再敢放弃 第二层智慧:定…

静态 Top Tree

哈哈哈学会的新东西啊,暴搓312行 在此鸣谢机房大蛇QEDQEDQED&&zxkqwq进行一个讲解 前置知识 en。没有。 (可能要理解下线段树的结构,前缀和,二分) 定义 Top Tree是什么? 就是对于一个给定的树,通过comp…

【笔记】【周期】

目录 《周期》核心解读笔记 第一类:基本面周期 —— 经济、政府、企业的底层逻辑 1. 经济周期 2. 政府调节周期 3. 企业盈利周期 第二类:心理周期 —— 投资人的情绪钟摆 1. 心理钟摆 2. 风险态度周期 第三类:市场周期 —— 信贷、房地产、股市的具体玩法 1. 信贷…

typescript-类的访问权限public、private、protected

访问权限这个你可以理解为类的某个属性或者某个方法可以在哪里访问。分三种&#xff0c;public(默认),protected,privatepublicpublic表示在任意的地方都可以访问某个类的属性或者方法。场景&#xff1a;比如你叫小名&#xff0c;别人要叫你的时候&#xff0c;得知道你的名字&a…

【笔记】【逆向思维:顶级大脑的降维思考智慧】

目录 逆向思维:顶级大脑的降维思考智慧 方法一:反向目标法 —— 从 “要什么” 到 “不要什么” 方法二:因果倒置法 —— 从 “结果推原因” 到 “原因推反向结果” 方法三:换位思考法 —— 从 “我的视角” 到 “对立面视角” 误区一:为了反向而反向,忽略底层逻辑 …

工信部擘画“开源新基建”:推动工业互联网平台生态跃迁

当工业的庞大躯干寻求智能化的灵魂&#xff0c;一场围绕“连接”与“控制”的深层博弈正在展开。开源&#xff0c;这把曾经重塑了互联网世界的钥匙&#xff0c;如今被赋予了打开工业互联网下一道价值之门的使命。1月13日&#xff0c;中华人民共和国工业和信息化部&#xff08;以…

ASTM D4169-23e1测试,ASTM D4169标准模拟,包装运输测试ASTM D4169试验

一、标准定义与合规性确认 ASTM D4169-23e1 是美国材料与试验协会&#xff08;ASTM International&#xff09;发布的《运输集装箱和系统性能测试的标准实施规程》&#xff0c;2023 年 12 月批准、2024 年 1 月发布&#xff0c;核心是通过实验室模拟物流全链路风险&#xff0c…

【课程设计/毕业设计】基于SpringBoot的医院医疗护工陪护系统的设计与实现基于springboot的护工管理便捷服务系统【附源码、数据库、万字文档】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

中国AI模型的“双向涟漪”——从全球南方自主到美企的市场转向

美国闭源AI模型长期以“技术垄断地缘绑定”主导全球市场&#xff0c;中国开源人工智能模型则以“自主可控、成本友好、适配本地”为核心优势&#xff0c;逐步渗透全球南方国家、发达国家企业及硅谷核心圈&#xff0c;推动全球AI技术选择格局发生深刻变革。据彭博社、英国《金融…

SRM+AI智能寻源:10分钟搞定供应商寻源!

对于采购人员而言&#xff0c;寻源是采购非常重要&#xff0c;但同时也非常耗费精力的环节。传统模式下&#xff0c;为找到合适的供应商&#xff0c;采购人员可能需要&#xff1a;通过搜索引擎大量检索、搜集各类供应商信息&#xff0c;筛选符合要求的供应商。逐一在征信平台上…

Java计算机毕设之基于Springboot的医疗护理管理服务系统(完整前后端代码+说明文档+LW,调试定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

强烈安利8个AI论文网站,本科生搞定毕业论文不求人!

强烈安利8个AI论文网站&#xff0c;本科生搞定毕业论文不求人&#xff01; 论文写作不再难&#xff0c;AI 工具助你轻松应对 对于很多本科生来说&#xff0c;毕业论文是一项既重要又棘手的任务。从选题到撰写&#xff0c;再到修改和降重&#xff0c;每一步都充满了挑战。而如今…

firebird 数据库 C# 开发报错

1、找不到dllUnable to load DLL fbembed or one of its dependencies: 找不到指定的模块。 (0x8007007E) 2、磁盘结构错误发现式12 不支持13的错误 firebird下载的exe选择3的版本。不要选5的版本。 3、占用,多个程…

企业邮箱收费吗?解析主流品牌的三种收费模式

在企业数字化转型的进程中&#xff0c;专业的企业邮箱已成为标配工具。许多初创团队和企业在初次接触时&#xff0c;常会疑惑&#xff1a;“企业邮箱收费吗&#xff1f;” 答案是肯定的。与个人免费邮箱不同&#xff0c;专业的企业邮箱服务通常需要付费&#xff0c;以获得专属域…

PCB行业MES厂商TOP3推荐:主流厂商对比与务实建议

在智能制造深入推进的背景下&#xff0c;MES系统已成为PCB企业提升效率、保障质量、满足客户追溯要求的关键基础设施。然而&#xff0c;PCB制造具有工序繁多&#xff08;20道&#xff09;、产品高度非标&#xff08;HDI/FPC/厚铜板等&#xff09;、质量敏感度高、交付节奏快等特…

PCB板上你是普通油墨,我是低损耗油墨,能一样吗?

一博高速先生成员--黄刚 文章一开始就先给各位选择困难症的粉丝们出一道题&#xff0c;如果今天让你们来设计下面的这组25G光口信号的布线&#xff0c;你会选择走内层还是表层呢&#xff1f; 其实高速先生相信在座的各位PCB工程师更愿意选择走表层&#xff0c;原因就是过孔如果…

重组蛋白表达系统技术详解:从原核到真核的系统比较与选择指南

重组蛋白表达系统是现代生命科学研究和生物技术服务行业的基础性技术平台。从科研试剂的角度,重组蛋白表达系统不仅支撑着基础研究、药物靶标验证、抗体筛选等多种实验,还为生物公司提供了稳定、可控的蛋白样品来源。…

针对工科论文或材料密集型研究,以下工具能有效优化AIGC检测结果,同时保持学术严谨性

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

FastAPI系列(03):路径操作装饰器方法及其参数

本系列汇总,请查看这里:https://www.cnblogs.com/uncleyong/p/19503695 路径操作装饰器方法 也就是请求方式,fastapi支持各种请求方式:@app.get() @app.post() @app.put() @app.patch() @app.delete() @app.option…

快捷支付:高效应对高频交易痛点

针对高价商品交易中易出现的付款失败、收款受限等问题&#xff0c;快捷支付可轻松应对&#xff0c;支持一分钟内完成上百笔交易&#xff0c;完美适配高并发交易场景。操作流程极简高效&#xff1a;用户首次绑卡仅需提交银行卡号、开户名、预留手机号三要素&#xff1b;后续付款…