一道阿里的java多线程题

学透并发编程——LeetCode多线程协作经典题 LeetCode上专门的多线程题目版块,本文通过解决几道leetCode上的多线程协作交替打印的编程题,来加深对并发编程的理解,并训练一下并发编程思想。 阅读详情
public class MyStack {  
        private List<String> list = new ArrayList<String>();  
      
        public synchronized void push(String value) {  
            synchronized (this) {  
                list.add(value);  
                notify();  
            }  
        }  
      
        public synchronized String pop() throws InterruptedException {  
            synchronized (this) {  
                if (list.size() <= 0) {  
                    wait();  
                }  
                return list.remove(list.size() - 1);  
            }  
        }  
    }
case1:删除不存在的元素

假设现在有三个线程A、B、C,其中A用于添加元素,B、C用于删除元素。
某时刻,栈为空,
step1、线程B运行,获取锁,list.size()=0,进入wait(),wait状态下会释放当前锁
step2、线程A运行,获取锁,添加元素,执行list.add(value),此时list.size()=1,注意:在A执行notify()之前,线程C启动,发现其他线程已经拥有对象锁,因此进入阻塞状态,等待锁
step3、线程A执行notify(),试图唤醒等待中的线程B,但是但是但是,如果此时C获取了对象锁,那么将优先执行,那么C判断list.size()=1,直接删除元素,然后释放对象锁(疑惑:1.这里C是否可以优先获取对象锁,因为B已经在wait状态? 2.如果C能优先获取对象锁,那么如何保证C结束后B能顺利被唤醒?)
step4、wait状态下的B获取对象锁,直接执行list.remove(list.size()-1),发生错误!!!
解决办法: 使用可同步的数据结构来存放数据,比如LinkedBlockingQueue之类。由这些同步的数据结构来完成繁琐的同步操作。

case2:虚假唤醒

虚假唤醒就是一些obj.wait()会在除了obj.notify()和obj.notifyAll()的其他情况被唤醒,而此时是不应该唤醒的。
解决的办法是基于while来反复判断进入正常操作的临界条件是否满足: (将if换成while)
synchronized (obj) {

while (<condition does not hold>)

obj.wait();

... // Perform action appropriate to condition

}
详解阿里Java面试题——多线程精选53题【含答案】,面试必备 本文转载自:详解阿里Java面试题——多线程精选53题【含答案】,面试必备 前言 为了能够在面试回答中优雅而不失体面回答面试考点,该文章借鉴了不同平台对知识点的描述。 如有侵权请联系我 文章的不足和错误请指正,好的建议也不要吝啬,我都会采纳并更正 史上最强多线程面试53题【含答案】,点赞,转发,收藏一气呵成! 金九银十虽已过去大半,但还有金三银四呀,最新整理的最全多线程并发面试53题和答案总... 阅读详情

相关推荐

我的后端Java面经、八面阿里,已拿offer!(阿里飞猪、阿里健康、阿里菜鸟)心得感悟!

阿里巴巴面试 自我介绍 讲一个项目,我说的区块链,然后围绕着区块链说了一堆,比如说我没回答上来的,有没有做性能测试,还有orderer节点都有什么服务 最大堆概念 排序算法比较排序时间复杂度,如何查找最大的1000个数 有没有什么排序算法能够小于nlogn的 阿里巴巴菜鸟网络面试 面试岗位 菜鸟网络的JAVA开发岗 面试体验 工作内容为Java后台的业务开发,还有一部分C++工作,聊了大概1个...

Java____superman的博客 5111

记一道阿里多线程笔试题

最近有同事收到阿里的面试邀请,因地点在杭州就先进行了一轮线上笔试,其中有这样一道题,和大家分享一下。 题目是这样的:用多个线程交替打印字符,如字符串"ali",一个线程打印a,一个线程打印l,一个线程打印i , 一个线程打印空格,如:ali ali ali … 代码支持拓展,能打印任意字符串"alibaba",如:alibaba alibaba alibaba alibaba … 是一道经典的线程交替打印相关的题目,和网上轮流打印ABC的题目很相似,先说一下轮流打印ABC的解题思路,再回过头来看阿里的这道题

从入门到脱发 1231

关于阿里春招的一道多线程面试题的个人愚见

原题如下:    多线程,5个线程内部打印hello和word,hello在前,要求提供一种方法使得5个线程先全部打印出hello后再打印5个word。参考文章:    https://blog.youkuaiyun.com/helllochun/article/details/44343161代码如下:    five.javapublic class Five { //定义一个公共锁对象 priva...

hhhhhhhhhhkhhh的博客 1440

阿里巴巴80道多线程并发面试题(1~10道答案解析)

/创建一个新的ThreadLocalMap } public T get() { Thread t = Thread.currentThread();... 线程:pool-1-thread-1 count=1997 线程:pool-1-thread-1 count=1998 线程:pool-1-thread-1 count=1999 线程:pool-1-thread-2 count=315 线程:pool-1-thread-2 count=2000 最终结果是 :2000 复制代码。

m0_63437643的博客 196

2017年阿里巴巴Java开发工程师面试总结

前言从7月3号开始第一轮面试持续到刚才发现已回绝,整整一个月有余,之前一直不敢开面经,因为这个博客在简历中写过,面试官是可以看到我的博客的,所有我也不敢透露太多,最后的一个回绝整整距离第四面隔了16天才在面试官网进程中看到,一阵恍惚之后清醒过来,真是有点佩服阿里的效率了,这段时间很漫长,收获也很多,现在终于可以不用提心吊胆好好静下来谢谢自己的文字了。流程通过朋友内推拿到阿里的提前批面试,刚发送简历,

小疯子的博客 1万+

阿里Java技术岗238道面试题:多线程+设计模式+Mybatis+Kafka。

像阿里这种大厂,面试问题从来就不是一成不变的,知识掌握不全面是很难拿到offer的。 分享下我面试阿里所遇到的一些真题还有一些也是我在网上一起整理的,都总结了在一起,知识点囊括了:Java 基础,容器,多线程,反射,对象拷贝,Java Web,异常,网络,设计模式,Mybatis,RabbitMQ等。 会由于篇幅的原因,238道题目的答案不一一公布给大家,需要的朋友可以关注微信公众号:Jav...

weixin_45127309的博客 2198

Java多线程编程实战:10个经典练习题详解与代码实现

在多线程环境中,多个线程可能会同时访问和修改共享资源,导致数据竞争和不一致的问题。在多线程编程中,线程是程序执行的基本单位之一。修饰时,线程对变量的修改会立即写入主内存,其他线程可以立即看到变量的最新值。是Java中用于管理线程池的接口。通过线程池可以复用线程,提高线程的利用率。块用于同步代码块,确保多个线程访问共享资源时的线程安全。方法实现,而线程的停止可以通过设置一个标志变量来实现。方法用于暂停当前线程的执行,指定的时间内线程不会运行。接口,可以将线程的逻辑封装到一个对象中,然后通过。

1306

SD--根据订单创建出库单(相关的函数列表的介绍系列篇(2))

创建订单样例代码参见:http://blog.youkuaiyun.com/CompassButton/archive/2007/05/09/1601712.aspx 可以根据一个订单或者部分订单项来创建出库单,代码如下:* Populating the item data lx_sales_item-ref_doc = l_vbeln. lx_sales_item-ref_item = c_000010

SAP BLOG--Jack Wu 6226

阿里巴巴社招笔试题——多线程打印

前一段时间参加了一次阿里的面试,有一道远程代码题,当场没有做出来,现在补上,题目内容大概如下: 给定一个数组[1,2,3,4,5,6,7,8,9....,15],要求遍历数组,遇到可以同时被3和5整除的数字,打印C;遇到仅能被5整除的数字,打印B;遇到仅能被3整除的数字,打印A;其他打印数字本身; 要求四个线程,每一个线程执行一个打印方法。 我这里使用了lock和condition做了下实现...

wo2huoa的博客 4018

iverilog+GTKwave使用总结

iverilog是一个开源的硬件描述语言(HDL)仿真工具,用于对硬件描述语言(如Verilog)编写的数字电路进行仿真。它可以将Verilog代码编译为仿真模型,并通过仿真运行来验证设计的正确性。iverilog支持IEEE 1364-2005 Verilog语言标准,并提供了丰富的功能,包括对多种Verilog语言特性的支持、模块化设计、测试平台等。它还可以与其他工具(如GTKWave波形查看器)配合使用,以便进行仿真后的波形查看和分析。

争取早日成为硅农 2万+

ESP32 WiFi自平衡小车硬件与PID控制实战

自平衡小车是典型的嵌入式实时反馈控制系统,其核心依赖姿态感知(如MPU6050)、电机驱动(如L298N)与闭环控制算法(如PID)的协同。系统通过IMU采集俯仰角,经互补滤波融合处理,再由PID控制器实时计算PWM输出,驱动直流电机产生恢复力矩;WiFi模块(ESP32内置)则提供远程遥控接口,实现AP模式下的Web指令交互。该架构兼具硬实时性(毫秒级采样与响应)与软实时性(HTTP服务),广泛应用于机器人教学、智能小车开发及边缘控制原型验证。本文围绕ESP32平台,详解传感器接口、驱动电路设计、PID抗

weixin_42509513的博客 392

java-多线程-一道阿里面试题分析

传说这是阿里的一道面试题: 也传说发这道题出来的作者去了tmail。下面是关于题目的描述:      这段代码大多数情况下运行正常,但是某些情况下会出问题。什么时候会出现什么问题?如何修正?可见博客 http://yueyemaitian.iteye.com/blog/1387901  Java代码   public class MyStack {

liguogangde的专栏 3065

HTML粉色爱心(完整代码)

HTML语言实现粉色爱心的完整代码。

AIGC 1117

阿里巴巴java多线程面试题目汇总

开个小坑,小牛打算陆续开始写互联网大厂的高频面试题整理。觉着对您有帮助的点个赞哈,小牛鞠躬了。 有读者要pdf打印下来看,链接先挂这了 链接:https://pan.baidu.com/s/1Mm13XnX6_VuP3PAvUlFYCA 提取码:8yms 先来看看阿里巴巴java多线程常考的TOP5题大家会几题哈 简述java内存模型(JMM) java内存模型定义了程序中各种变量的访问规则。其规定所有变量都存储在主内存,线程均有自己的工作内存。 工作内存中保存被该线程使用的变量的主内存副本,线程对变量的

weixin_53705077的博客 384

USB 基础学习:USB 电气信号介绍

USB电气信号技术解析 USB通信的核心是差分信号传输技术,通过D+和D-两根线传输相位相反的电压信号实现数据通信。USB信号系统包含三类关键信号:差分数据信号(抗干扰性强)、单端状态信号(用于设备识别)和电源信号(提供5V供电)。USB2.0采用400mV电压摆幅和NRZI编码,支持低速(1.5Mbps)至高速(480Mbps)传输;USB3.0则新增专用差分对,数据速率可达20Gbps。物理层通过上拉/下拉电阻检测设备连接,高速模式需特殊握手协议。抗干扰设计的关键在于保持差分线等长、阻抗匹配和使用共模扼

浩瀚之水的专栏 1783

001、NPU是什么?为什么嵌入式设备需要它?

本文通过作者调试工业相机板卡的经历,引出嵌入式设备为何需要NPU(神经网络处理器)的探讨。文章对比了CPU和NPU的设计哲学差异,指出NPU通过专用乘加器阵列和优化的数据流,能高效处理神经网络运算。作者分析了嵌入式设备使用NPU的三大优势:算力提升、功耗降低和实时性保障,并介绍了三类常见NPU形态。通过一个YOLOv5模型调试案例,揭示了NPU使用中的常见陷阱,最后给出五条实用建议,强调理解NPU原理和局限的重要性。文章生动展现了NPU在嵌入式AI应用中的关键作用。

m0_50546716的博客 127

面试题(4)阿里等BAT必考多线程面试60题

BAT必考系列!多线程60题】 多线程有什么用? 线程和进程的区别是什么? ava实现线程有哪几种方式? 启动线程方法start()和run()有什么区别? 怎么终止一个线程?如何优雅地终止线程? 一个线程的生命周期有哪几种状态?它们之间如何流转的? 线程中的wait()和sleep()方法有什么区别? 多线程同步有哪几种方法? 什么是死锁?如何避免死锁? 多线程之间如何进行通信? 线程怎样拿到...

cowbin2012的专栏 1万+

打脸来的太快了,又发现一个Trae的宝藏功能--内置浏览器可以指定机型来显示前端界面

今天给大家分享一个Trae的实用功能,就是SOLO模式下内置浏览器可以指定不同的手机、平板机型来查看前端页面显示效果,我感觉这个功能很棒,忍不住就跟大家分享一下。

cpp加油站的专栏 6567

2019阿里java面试题

阿里面试题目目录 技术一面(基础面试题目) 技术二面(技术深度、技术原理) 项目实战(项目模拟面试) JAVA开发技术常问的问题 阿里必会知识 阿里面试范畴 面试总结 文章福利(答案获取) 一:阿里技术一面(基础掌握牢固) 常用的异常类型? session java锁 gc原理 hashmap listlink arraylist 区别 aop 原理 多线程 kafka 原理和容错 spark...

ANGEL CITY 6468

15、远程操作水下航行器(ROV)的非线性控制系统设计

本文探讨了远程操作水下航行器(ROV)的非线性控制系统设计,重点介绍了多变量PID控制、改进的PD控制和滑模控制三种方法。详细阐述了各控制策略的原理、建模与仿真过程,并通过对比分析其在稳态误差、振荡、抖振及跟踪效果等方面的性能表现。文章还提出了针对不同控制方法的优化建议,并给出了选择合适控制策略的决策流程,为ROV高精度运动控制提供了系统性解决方案。

sun99的博客 157

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

刷题刷到吐,终于跳出小公司,拿到了阿里Java岗的offer

前期努力和笔试没什么好说的了,面试很多人会紧张导致发挥不好,加之有些压力面文档问题很偏很容易就奔溃了导致后续问题都受影响。 在这里教大家一个诀窍——“把这场面试当作和朋友的一次饭后的技术交流”(觉得压力大的可以事先想象下面试官当年也是和你一样走过来的普通人,有喜怒哀乐,也被怼过,也出过丑。。。。逃) 最后再写个插曲,就是阿里四面现场最后那个问题“ 说一个你可能不太舒服的问题,这个问题不算面试内,看得出你很聪明也很努力,但是你也要知道相对于这些东西,那些计算机出生的研究生们可能比你基础要更加扎实一些,比如计算

weixin_47955802的博客 1165

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

刷题拿offer,阿里巴巴10w+字总结的Java面试题(附答案)够你刷

其包含的内容模块有:基础、JVM、多线程与高并发、Spring、MyBatis、SpringBoot、MYSQL、SpringCloud、Dubbo、Nginx、MQ、数据结构与算法、Linux、Zookeeper、Redis、分布式、网络、设计模式、maven、ElasticSearch、git、软实力集训等!

m0_69632475的博客 1399

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

阿里的一道在线测评题

//评测题目: 共计9个苹果,有2只猴子,一个猴子每次拿2个苹果,一个猴子每次拿3个苹果,如果剩余的苹果不够猴子每次拿的数量,则2只猴子停止拿苹果。我给的答案:public class Apple{    public int appleCount=9;    public static void main(String args[]){        Apple apple=new Apple(...

zhw19890710的专栏 5046

史上最全阿里技术面试题目:Java

来自脉脉 题目目录 技术一面(基础面试题目) 技术二面(技术深度、技术原理) 项目实战(项目模拟面试) JAVA开发技术常问的问题 阿里必会知识 阿里面试范畴 阿里技术一面(基础掌握牢固) 常用的异常类型? session java锁 gc原理 hashmap listlink arraylist 区别 aop 原理 多线程 kafka 原理和容错 spark hadoop 原理 redis 同步...

喜欢打篮球的普通人 1857

详解阿里Java面试题——多线程精选53题「含答案」

多线程精选53题 1.什么是线程 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进行多处理器编程,可以使用多线程对运算密集型任务提速。比如,如果一个线程完成一个任务要100 毫秒,那么用十个线程完成改任务只需 10 毫秒。Java在语言层面对多线程提供了很好的支持。 2.线程和进程有什么区别 从概念上: 进程 :一个程序对一个数据集的动态执行...

Qqun954715313的博客 857

面试题(2)阿里最全面试100题

【阿里天猫、蚂蚁、钉钉面试题目】 1、微信红包怎么实现。 2、海量数据分析。 3、测试职位问的线程安全和非线程安全。 4、HTTP2.0、thrift。 5、面试电话沟通可能先让自我介绍。 6、分布式事务一致性。 7、nio的底层实现。 8、jvm基础是必问的,jvm GC原理,JVM怎么回收内存。 9、Java是什么。 10、API接口与SDI接口的区别(API是提供给别人的接口)。 11、du...

cowbin2012的专栏 1万+
上一篇: SM4密码算法(附源码)
下一篇: Java 中 byte、byte 数组和 int、long 之间的转换
ly0303521
博客等级 码龄17年 135粉丝 90原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值