一道阿里的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

从隐私保护到生命守护:CPD技术中的传感器选择与权衡

本文探讨了智能座舱中儿童存在检测(CPD)技术的传感器选择与隐私保护平衡策略。通过分析毫米波雷达、UWB等先进技术的性能与隐私风险,揭示了如何在确保儿童安全的同时保护用户隐私。文章还展望了CPD技术与座舱生态系统的未来融合趋势,为汽车安全领域提供了重要参考。

weixin_29159441的博客 301

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

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

wo2huoa的博客 4018

机械臂控制的基础知识

在现代工业中,机械臂的自动化控制已经成为智能制造的重要一环。控制机械臂涉及多个学科,包括机械设计、运动学、控制理论和编程等。本文将从以下几个方面介绍机械臂控制的核心知识点:机械臂的构成、运动学分析、动力学建模、控制方法及编程实现。

qq_45728381的博客 5470

保姆级教程:在K230开发板上为张大头步进电机实现位置、速度、回零全功能控制

本文提供了一份详细的K230开发板与张大头步进电机的控制教程,涵盖硬件连接、协议解析、模块化代码实现及实战案例。通过位置、速度和回零功能的全面讲解,帮助开发者快速掌握步进电机的高级控制技术,适用于自动化、机器人等应用场景。

weixin_42629671的博客 713

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

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

liguogangde的专栏 3065

MounRiver Studio(MRS)使用技巧:添加头文件目录;增加代码分组

MounRiver Studio(MRS)使用技巧:添加头文件目录

cheng___yi的博客 1810

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

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

weixin_53705077的博客 384

【OpenClaw从入门到精通】第11篇:OpenClaw 2026多模态实战全攻略:OCR/语音/图像自动化(附完整代码+双部署方案)

本文聚焦OpenClaw 2026版核心升级的多模态能力,从底层架构原理到实操落地全流程拆解。先解析“统一指令解析+多工具适配器”的核心设计逻辑,再提供阿里云规模化部署(适合批量任务)与本地汉化版部署(适合隐私数据调试)的详细步骤,含依赖安装、配置验证完整操作;随后落地三大高频实战场景——OCR合同信息结构化提取、会议录音自动转写纪要、电商商品图片智能打标,每个场景均提供可直接运行的完整代码、执行结果演示及流程说明;最后补充多模态任务避坑指南、性能优化技巧与成本控制方案。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2613

如何使用事务码SMICM分析ABAP代码发起的HTTP请求的错误

当我用CL_HTTP_CLIENT往一个外网的url发请求时,遇到错误:ICM_HTTP_SSL_PEER_CERT_UNTRUSTED 错误是从这段ABAP代码里抛出来的: CALL METHOD lo_http_client-&gt;get_last_error IMPORTING code = lv_sysubrc message = ev_error_message. "BREAK-...

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3209

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

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

cowbin2012的专栏 1万+

基于SSD2828和STM32的MIPI显示屏驱动系统设计与实现

在硬件层面,需要将STM32、SSD2828和MIPI显示屏连接起来。STM32与SSD2828的连接:通过SPI接口连接STM32和SSD2828,用于配置和控制SSD2828。SSD2828与MIPI显示屏的连接:通过MIPI DSI接口连接SSD2828和MIPI显示屏,用于传输显示数据。

qq_38334677的博客 7150

2019阿里java面试题

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

ANGEL CITY 6467

相位偏折PMD全栈技术拆解 | 四步相移解算+梯度积分形貌重建,助力镜面工件微米级缺陷高精度稳定检测

工业精密检测领域中,高反光镜面类工件长期存在检测瓶颈,涵盖汽车高亮车漆、半导体抛光晶圆、光学透镜、精密抛光模具、玻璃盖板等主流产品。传统2D机器视觉仅能识别表面明显污渍、大尺寸破损,完全无法捕捉微米级划痕、凹坑、橘皮、曲面微形变等微观缺陷;常规线激光3D、普通结构光3D检测设备,面对镜面材质会产生严重镜面反射杂光,激光条纹、结构光图案完全失真,必须喷涂显影粉辅助检测,不仅破坏工件表面完整性,还无法适配自动化量产产线,检测效率与良率极低。

getusushu的博客 544

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

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

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

weixin_47955802的博客 1165

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

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

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

m0_69632475的博客 1399

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

阿里的一道在线测评题

//评测题目: 共计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、付费专栏及课程。

余额充值