京东二面JVM如何实现线程同步问题时该如何回答?

上次挂在了京东(Java岗)二面不服气 流量控制具体怎么控制的?拥塞控制具体的算法怎么样的?Java中的锁有用到哪些?说说syn、re和cas的区别?cas具体怎么现实的?进程和线程的区别?具体讲下什么情况下是多进程,什么情况下是多线程?java中的map有哪些?各个简单介绍下hashmap的底层数据结构是怎么样的?有没有map是按key的值排序的?底层怎么现实的?类的加载流程?具体每一步做了什么?Spring Bean 的作用域。两道算法题1、有序二维数组找target,找到返回坐标,找不到返回[-1, -1];2、树的根节点到叶子节点的所有路 阅读详情

Java编程语言的优势之一是它支持语言级的多线程。大部分支持都集中在协调对多个线程之间共享的数据的访问。

JVM将正在运行的Java应用程序的数据存放到多个运行时数据区域中:一个或多个Java堆栈,堆和方法区。

在JVM内部,每个线程都被分配一个虚拟机栈,其中包含其他线程无法访问的数据,包括线程调用的每个方法的局部变量,参数和返回值。虚拟机栈上的数据仅限于基本类型和对象引用。在JVM中,无法将实际对象的存放在虚拟机栈上,所有对象都分配在堆上。

JVM中只有一个堆,并且所有线程都共享它。堆只包含对象。无法在堆上分配单独的原始类型或对象引用 - 这些东西必须是对象的一部分。数组也分配在堆上,包括基本类型的数组,但在Java中,数组也是对象。

除了虚拟机栈和堆之外,还有方法区,它包含程序使用的所有类(或静态)变量。方法区域类似于堆栈,因为它只包含基本类型和对象引用。但是,与虚拟机栈不同,方法区域中的类变量由所有线程共享。

  • 对象和类锁如上所述,JVM中的两个存储区包含所有线程共享的数据。这些是:堆,包含所有对象
  • 方法区域,包含所有类变量

如果多个线程需要同时使用相同的对象或类变量,则必须很好的控制对数据的访问。否则,程序将出现不可预测的问题。

为了协调多个线程之间的共享数据访问,Java虚拟机将锁与每个对象和类相关联。锁就像一个特权,任何时候只有一个线程可以“拥有”。如果线程想要锁定特定对象或类,它会询问JVM。在线程向JVM发出锁定之后JVM会为线程提供锁定。当线程不再需要锁时,它会将锁归还给JVM。如果另一个线程请求了相同的锁,则JVM将锁传递给另外一个线程。

类锁在实现上为对象锁。当JVM加载类文件时,它会创建一个类实例java.lang.Class。锁定类时,实际上是锁定该类的Class对象。

线程无需获取锁来访问实例或类变量。但是,如果一个线程确实获得了一个锁,那么没有其他线程可以访问锁定的数据,直到拥有该锁的线程释放它为止。

监视器

JVM将锁与监视器结合使用。监视器相当于是监护人,它监视一系列代码,确保一次只有一个线程执行代码。

每个监视器都与对象引用相关联。当线程到达监视器监视下的代码块中的第一条指令时,线程必须获取对引用对象的锁定。在获得锁之前,不允许线程执行代码。一旦获得锁定,线程就会进入受保护代码块。

当线程离开块时,无论它如何离开块,它都会释放相关对象的锁定。

多个锁

允许单个线程多次锁定同一对象。对于每个对象,JVM维护对象被锁定的次数。解锁对象的计数为零。当线程第一次获取锁定时,计数增加到1。每次线程获取对同一对象的锁定时,计数都会递增。每次线程释放锁定时,计数都会递减。当计数达到零时,锁被释放并可供其他线程使用。

同步块

在Java语言术语中,必须访问共享数据的多个线程的协调称为同步。该语言提供了两种内置方式来同步对数据的访问:使用synchronized语句或同步方法。

同步语句

要创建synchronized语句,请使用synchronized带有表达式的关键字,该表达式的计算结果为对象引用,如reverseOrder()下面的方法所示:

class KitchenSync {
 private int[] intArray = new int[10];
 void reverseOrder() {
 synchronized (this) {
 int halfWay = intArray.length / 2;
 for (int i = 0; i < halfWay; ++i) {
 int upperIndex = intArray.length - 1 - i;
 int save = intArray[upperIndex];
 intArray[upperIndex] = intArray[i];
 intArray[i] = save;
 }
 }
 }
}

在上面的例子中,在当前对象(this)上获取锁之前,不会执行synchronized块中包含的语句。如果代替this引用,表达式产生对另一个对象的引用,则在该线程继续之前将获取与该对象相关联的锁。

看一下该类方法生成的字节码信息

两个操作码monitorenter和monitorexit,用于方法中的同步块。

当JVM遇到monitorenterJ时,它获取虚拟机栈上对象引用的对象的锁。如果线程已拥有该对象的锁,则递增计数。

当JVM遇monitorexit时,计数递减。当计数达到零时,监视器被释放。

请注意,即使从同步块中抛出异常,catch子句也可确保锁定的对象将被解锁。无论退出同步块如何,当线程进入块时获取的对象锁定肯定会被释放。

同步方法

要同步整个方法,只需将synchronized关键字包含在方法限定符之一中,如下所示:

 class HeatSync {
 private int[] intArray = new int[10];
 synchronized void reverseOrder() {
 int halfWay = intArray.length / 2;
 for (int i = 0; i < halfWay; ++i) {
 int upperIndex = intArray.length - 1 - i;
 int save = intArray[upperIndex];
 intArray[upperIndex] = intArray[i];
 intArray[i] = save;
 }
 }
 }

JVM不使用任何特殊操作码来调用或从同步方法返回。当JVM解析对方法的符号引用时,它确定方法是否已同步。如果是,则JVM在调用方法之前获取锁。对于实例方法,JVM获取与调用该方法的对象关联的锁。对于类方法,它获取与方法所属的类关联的锁。在synchronized方法完成后,无论是通过返回还是通过抛出异常来完成,都会释放锁。

希望大家能够支持我的文章,点个关注不迷路,点完关注的小伙伴可以找我私聊领取Java学习资料、大厂面试题库等福利!也欢迎大家在评论区留言交流JVM见解。

上次挂在了京东Java二面不服气,Java架构师面试题及答案 没想到。。。。。。。直接凉凉! 以下为第一次京东二面凉经 京东一面凉经 object的方法,7大方法 synchronized方法讲解 synchronized方法实现原理 volatile关键字的原理 锁的分类 偏向锁讲解 NoClassDefFoundError和ClassNotFoundException的区别 追问,ClassNotFoundException是不是只发生在编译时,运行时可不可以 类加载机 制 redis过期策略及内存淘汰机制 mysql的索引种类4种 Innodb和myIs 阅读详情

相关推荐

【面试】京东成都研发部面试

在拉钩上投递的简历,第二天京东就打电话了,效率还挺快的,激动得发抖。由于面试预约的是周一,所以周末在家准备了,啃了几遍《深入理解Java虚拟机第二版》,便上阵了。 9点过来到京东成都研发部(西部智谷),很天真的等到了9:40(大学里辅导员说去面试时不要去早了,提前10-20分钟就好),结果上去时有一个哥们已经面试了接近半小时了。 进入一面 走来了一个面带微笑的同志,很年轻,先让我做个简单的自

Schelor的专栏 6803

【学习JVM】JVM并发同步机制

JVM并发同步机制 需要参考的准备数据: 《深入理解JAVA虚拟机》 需要参考的知识点: volatile原理 unsafe.compareandswap原理 多线程 amdahl定律(在Cpu个数很大的情况下,可并行解决的子问题越多阿姆达尔值越大) final可见性原理 amdahl = (Ws + Wp)/(Ws + Wp/n) 知识的记录方式: - 查看博客,把没有遇见过的或者觉...

度窝-笔记 428

【上岸经验】我的京东一二三面面经,分享出来希望帮助到大家(本人已经oc)

前言 说一点心里话吧!人人都想成为架构师,但往往只有10%的程序员能取得成功,想象很简单,但是坚持很难。 最后想给所有程序员一点建议:在日常工作中,万万不要仅局限于自己手头上的工作,因为自己负责的工作内容可能只是某系统上的“冰山一角”,这个系统是前辈们留下的财富,我们要学会怎么去利用它。这个时候,就需要我们站得高一些,看得远一点,去了解这个系统的整个经脉,揣测当初它设计的“Why?How?”,换做自己应该会怎么做,这样或许你将会离架构师更近一步。 另外我这里为大家准备了一线大厂面试资料和我原创的超硬核PD

weixin_49494194的博客 1723

java实现异步线程,回调接口

异步线程创建数据回调

weixin_55685021的博客 449

2020九月 京东大数据方向 Java 面试经验、面试题分享

足球运动里,身价最高的运动员就是能够把球踢进的那个人,临门一脚也是价值最高的运动。找工作如同这个阶段,如何把我们积蓄二十几,三十年的知识能力和修养在极短地时间内表达地最好呢? 在这里,跟大家分享一下我京东大数据方向Java实习面试的经历,希望对面试的朋友有所帮助! 一面:(顺序可能不对) 1.先讲了一下笔试上的一道算法题,不难,就是找出两个数组合并后的中位数,总体思路就是,比较大小,找下标,但需要注意的是找到了中位数就可以停止循环了。 2.hashmap问的超级细,建议大家仔细看看,后来也问了chm..

weixin_48655626的博客 6902

【Java分享客栈】一文搞定京东零售开源的AsyncTool,彻底解决异步编排问题。.doc

【Java分享客栈】一文搞定京东零售开源的AsyncTool,彻底解决异步编排问题。.doc

基于原生JDK实现异步回调

我们希望执行异步任务的线程,在异步任务完成后,能自动调用异步结果的处理逻辑,不需要我们另起线程等待异步任务执行完成,这便是常说的异步回调。

L__ear的博客 651

FOC电机控制实战:增量式编码器零位校准的5个关键步骤(附STM32代码)

本文详细解析了FOC电机控制中增量式编码器零位校准的5个关键步骤,包括电角度锁定、定时器计数清零、机械偏移角补偿等,并提供了STM32平台的实战代码。通过精准的零位校准,可显著提升电机控制系统的精度和稳定性,适用于工业伺服和机器人关节等高精度场景。

rum55的博客 619

京东二面凉凉,竭尽全力三月,三月之期已到,这次终于拿下offer!

前言 这话要从三个月前说起:当时一名水友告诉我想要跳槽去京东,然后我就本着推波助澜,为粉丝打气的心态(也可能是看热闹不嫌事儿大?)就支持他一定要去,梦想一定要有,没准儿就实现了呢? 没想到。。。。。。。直接凉凉! 以下为第一次京东二面凉经 京东一面凉经 object的方法,7大方法 synchronized方法讲解 synchronized方法实现原理 volatile关键字的原理 锁的分类 偏向锁讲解 NoClassDefFoundError和ClassNotFoundE

yyyy11119的博客 1724

从OAuth到DID:Web4.0身份验证协议的技术演进图谱

在数字身份体系从Web2.0向Web4.0跨越的进程中,身份验证协议正经历着从中心化授权到自主主权的范式转移。本文通过对比OAuth 2.0、OpenID Connect等传统方案与W3C DID、ION等去中心化协议的技术架构,揭示身份验证技术在性能、安全、隐私三大维度的代际差异。基于对GitHub、欧盟数字身份钱包等典型系统的实测数据分析,量化评估中心化授权服务器的单点故障风险与DID链上验证的吞吐量瓶颈。结合零知识证明、分布式密钥管理等前沿技术,为开发者提供面向Web4.0的渐进式身份架构迁移策略。

水务人 835

用PyTorch和snnTorch库5分钟搞定一个脉冲神经网络(SNN)手写数字识别Demo

本文详细介绍了如何使用PyTorch和snnTorch库快速搭建一个脉冲神经网络(SNN)手写数字识别Demo。通过模拟生物神经元的脉冲发放机制,SNN在低功耗场景中展现出独特优势。文章涵盖环境配置、数据预处理、模型构建、训练评估全流程,并提供了性能优化技巧和常见问题解决方案,帮助开发者在5分钟内实现高效的SNN应用。

weixin_29300931的博客 393

2020.8.13 京东Android开发二面

本次面试着重考察了计算机基础知识,Android相关均未涉及,及时暴露了我的一些漏洞,时间尚早,尽快补上来吧。 2020.8.13 京东Android开发二面 问题 聊项目 用过哪些数据库 数据库索引,如何实现,怎么使用 数据库范式 Java最新版本特性 Java类加载机制 双亲委派机制如何实现稳定性与安全性 JVM内存模型 Java线程安全如何实现 lock如何使用 悲观锁、乐观锁 Java 与 闭包 sychronized如何使用 TCP三次握手 归并排序如何实现 编译原理还记得哪些 兴趣爱好 优.

qq_45254908的博客 2300

Apache Doris IP变更问题详解

Apache Doris IP变更问题详解

ith321的博客 7275

京东二面凉凉,三个月的闭关之旅,再次投递拿下京东零售意向函

就是会一直问到底,看你到底掌握到什么程度,如果掌握的不深刻很容易就被问出来了。redis 内存淘汰机制(MySQL里有2000w数据,Redis中只存20w的数据,如何保证Redis中的数据都是热点数据?第二次去京东面试因为准备的时间比较长,所以面试问题基本都在意料之中,最终也成功拿下了京东的offer,可喜可贺!(String,Hash,List,Set,Sorted Set)**1. 恶补JAVA并发底层的知识,尤其是synchronized,volatile和hashmap的。的粉丝都面试成功了?

2401_89285717的博客 714

Spyglass功耗分析:从RTL到优化的全流程实践

本文详细介绍了在RTL设计阶段使用Spyglass进行早期功耗分析的全流程实践。通过一个真实项目案例,阐述了早期功耗分析的必要性,并手把手指导了从文件准备、GUI操作到报告解读与优化的完整步骤。文章重点说明了如何利用Spyglass实现功耗分析的“左移”,在编码阶段识别和修复功耗热点,从而避免后期高昂的修改成本,是低功耗芯片设计的关键技能。

purple的博客 1118

InfiniteTalk (Wan2.1) 数字人 A800 落地实战:从依赖地狱到完美运行的保姆级指南

摘要:本文详细记录了在A800(80GB)服务器上部署InfiniteTalk开源数字人项目的完整流程。该项目基于阿里Wan2.1视频生成模型,支持无限时长流式生成,但环境配置极其复杂。作者总结了18个关键问题点,包括Python版本冲突、CUDA算子缺失等,并提供了黄金配置方案:使用Python3.10+PyTorch2.5.1环境,精准控制FlashAttention等核心库版本,以及针对A800的显存优化策略。最终实现480P视频30秒/步的生成速度,相比默认配置提升3.7倍性能。

软件工程师文艺 2046

上次挂在了京东(Java岗)二面不服气,前端面试题合集

基础知识是前端一面必问的,如果你在基础知识这一块翻车了,就算你框架玩的再6,webpack、git、node学习的再好也无济于事,因为对方就不会再给你展示的机会,千万不要因为基础错过了自己心怡的公司。前端的基础知识杂且多,并不是理解就ok了,有些是真的要去记。当然了我们是牛x的前端工程师,每天像背英语单词一样去背知识点就没必要了,只要平时工作中多注意总结,面试前端刷下题目就可以了。

966

Power BI常见问题篇1:无法打开文档

Power BI常见问题篇1:无法打开文档

weixin_48273257的博客 3307

上次挂在了京东(Java 岗)二面不服气,这次终于拿下 offer 努力终于有收获

上述知识点,囊括了目前互联网企业的主流应用技术以及能让你成为“香饽饽”的高级架构知识,每个笔记里面几乎都带有实战内容。很多人担心学了容易忘,这里教你一个方法,那就是重复学习。打个比方,假如你正在学习 spring 注解,突然发现了一个注解@Aspect,不知道干什么用的,你可能会去查看源码或者通过博客学习,花了半小时终于弄懂了,下次又看到@Aspect 了,你有点郁闷了,上次好像在哪哪哪学习,你快速打开网页花了五分钟又学会了。从半小时和五分钟的对比中可以发现多学一次就离真正掌握知识又近了一步。

2401_84048521的博客 860

uniapp:使用uni.request请求报错errMsg“:“request:fail abort statusCode:-1(uniApp使用uni.request向服务端接口发起请求失败报错)

解决request请求报错request:fail abort statusCode:-1,Uniapp打包到app后报错request:fail abort statusCode:-1,uniapp使用uni.request请求报错{“errMsg“:“request:fail abort statusCode:-1“}的解决办法,不是SSL证书问题,跳过ssl验证,解决https问题,Uniapp报错,小程序报错(含https解决方案)(真机预览问题)uni-app打包后不发请求的原因,uni-app真

✅ 精选推荐文章 3582

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

揭秘你不知道的京东面试诀窍!分享我的京东4面,本人上个月已成功入职!

前言 1、和项目负责人约了下班时间面试,看的出来加班比较多。项目负责人非常NICE,面试过程中一点不刁难,主要了解了我过去的工作经历,一直强调大家都是年轻人不必拘谨,所以我也感觉比较轻松,聊的也比较愉快。 2、然后因为部门老大比较忙,所以等了蛮久的, 这个过程中项目负责人都在细心接待,也试图引导我表达自己更多的优势和经验,所以虽然在等,我也觉得比较愉快。 3、后来跟部门老大面谈,老大比较严肃,问的问题也是诸如你的优势,你的弱势,平时喜欢干什么这类空泛的问题,我自觉表现还行,对方也比较看好我。果然不久后就收到

weixin_49494194的博客 1万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

上次挂在了京东Java二面不服气,-三月之期已到,这次终于拿下offer

选择联合索引还是多索引,最左前缀的规则 CAP理论的关系 见过哪些系统,保证两个牺牲一个的 一致性Hash 算法题: 给一个正数N,求这个N的所有的因子分解; N = 12; Ans = {12},{6,2},{3,4},{3,2,2} 解法:递归 京东二面凉经 自我介绍+项目 项目中的异步怎么做的?具体说说 用户密码的安全性怎么保证的? mybatis底层怎么实现的?(不会) tcp中拥塞控制和流量控制有什么区别? 流量控制具体怎么控制的? 拥塞控制具体的算法怎么样的? Java中的锁有用到哪些? .

m0_65321095的博客 213

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

上一篇: 神技,阿里P8纯手撸这份685页的微服务分布式系统开发实战手册
下一篇: 阿里新晋P7架构师分享Redis持久化
Javaesandyou
博客等级 码龄5年 742粉丝 563原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值