阿里巴巴社招笔试题——多线程打印(2)
接上一篇https://blog.csdn.net/wo2huoa/article/details/104213225,对于这道多线程打印题,我一开始的代码如下,与上一篇博文唯一的区别在于,当数组循环终止的时候,没有将锁释放掉,即没有调用lock.unlock(),结果发现程序输出完数组后,一直没有退出。
public class FourThread_0 implements Runnable {private static final int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};private static Lock lock = new ReentrantLock();private static Condition condition = lock.newCondition();//当前循环到的数组下标private static volatile int currentCount = 0;//打印方法实现private PrintFunction printFunction;//线程标志private int flag;public FourThread_0(int flag, PrintFunction printFunction) {this.flag = flag;this.printFunction = printFunction;}/*** 检查当前数组元素应该由哪个线程执行打印** @param n 数组元素* @return 线程标志*/private int checkFlag(int n) {if (n % 15 == 0) {return 0;} else if (n % 5 == 0) {return 1;} else if (n % 3 == 0) {return 2;} else {return 3;}}@FunctionalInterfaceinterface PrintFunction {void print(int n);}@Overridepublic void run() {while (true) {lock.lock();//数组循环结束之后直接returnif (currentCount >= array.length) {return;}while (checkFlag(array[currentCount]) % 4 != flag) {try {condition.await();} catch (InterruptedException e) {e.printStackTrace();}if (currentCount >= array.length) {//数组循环完之后直接returnreturn;}}printFunction.print(array[currentCount]);currentCount++;condition.signalAll();lock.unlock();}}public static void main(String[] args) {new Thread(new FourThread_0(0, (n) -> System.out.print("C"))).start();new Thread(new FourThread_0(1, (n) -> System.out.print("B"))).start();new Thread(new FourThread_0(2, (n) -> System.out.print("A"))).start();new Thread(new FourThread_0(3, System.out::print)).start();}}
这时候,开始查看问题是什么导致的
1. 使用jps命令查看java进程
2. 查看线程状态,并将线程结果打印到文件中
3. 查看线程状态
我们发现4个线程,只有执行return操作的线程结束了,其他三个都在WAITING状态,可以得出结论,如果线程结束之前没有释放掉lock,那么这个lock会一直没有被释放掉,阻塞其他线程,其他线程都处于等待状态,导致内存泄漏。
阿里巴巴社招笔试题——多线程打印(2)相关推荐
- 阿里巴巴社招笔试题——多线程打印
前一段时间参加了一次阿里的面试,有一道远程代码题,当场没有做出来,现在补上,题目内容大概如下: 给定一个数组[1,2,3,4,5,6,7,8,9....,15],要求遍历数组,遇到可以同时被3和5整除 ...
- 邮储社招Java笔试题_2019年及历年中国邮政储蓄银行社招笔试题和参考答案6套
2019年及历年中国邮政储蓄银行社招笔试题和参考答案6套 目录: 1.2016年中国邮政储蓄银行社会招聘笔试题和参考答案 2.2019年5月中国邮政储蓄银行社会招聘笔试题和参考答案 3.2019年中国 ...
- 第一次社招笔试题回顾(全基础题)
第一次社招笔试题回顾 在上个月裸辞之后,休息了近一个月,最近开始找工作,发现很多基础自己忘了挺多的.从校招过后,到现在,将近1年多没有怎么做过算法题,Eclipse,Idea这几个都用的比较少. 一家 ...
- 邮政社招笔试题库_工商银行招聘考试题库13套和参考答案
目录: 1. xx工商银行招聘面试题(笔试真题) 2. 中国工商银行xx分行招聘笔试题无答案(行测部分) 3. 中国工商银行客户经理招聘笔试题和答案 4. 中国工商银行总行校园招聘笔试题和参考答案(行 ...
- 邮政社招笔试题库_2016年中国邮政储蓄银行招聘考试笔试题库内容试卷历年真题...
邮政银行招聘考试笔试复习资料 历年考试真题 建议报考的同学提前做好复习准备 ,考试复习资料可以到"考佳卜资料网" 上面找找, 资料确实不错, 比较有针对性, 资料都是上次参加考试的 ...
- 深度剖析!阿里巴巴社招面试题答案总结分享,希望对大家有帮助!
阿里巴巴研发面经 阿里中间件研发面经 研发工程师(Java) 阿里一面: 1 自我介绍 2 项目中做了什么,难点呢. 3 Java的线程池说一下,各个参数的作用,如何进行的. 4 Redis讲一下 5 ...
- 爆肝三天整理!2021年阿里巴巴社招面试题总结,三轮技术面+HR面,总结的明明白白!
前言: 今年是我第一次正式面试,期间看了很多网上的帖子,给了我很大帮助.面试结束后一直想着将面经整理出来,但实验室一直有事,老师天天找,所以一直没有找到机会.端午终于有些空闲时间,赶紧将面经整理出来, ...
- 邮政社招笔试题库_中国邮政 招聘考试试题及答案 总括版
1 中国邮政招聘考试精华试题 一.单项选择题(共 60 题,每题 1 分.每题的备选项中,只有 1 个最符合题意) 1.根据<邮政法>的规定,在邮件寄递过程中,邮政企业的权利不包括( ). ...
- 邮政社招笔试题库_中国邮政招聘考试试题及答案--总括版
中国邮政招聘考试精华试题 一.单项选择题(共 60 题,每题 1 分.每题的备选项中,只有 1 个最符合题意) 1 .根据<邮政法>的规定,在邮件寄递过程中,邮政企业的权利不包括( ). ...
最新文章
- vi命令,印在杯子上,还是印在脑子里。
- python使用教程pandas-Python之Pandas使用教程
- ajax实现多选 radio true,jQuery操作radio、checkbox、select的方法总结
- 什么是is research?
- boost::partial_sort相关的测试程序
- pdf转图片 java_有将pdf文件转图片的格式方法吗?
- 计算机用于数据管理经历了,管理系统中计算机应用--期中测验答案
- 整理struct sockaddr和struct sockaddr_in
- 关键字值集合和IDictionary
- cfa英语不好的怎么学_考CFA,英语太差怎么办?
- 动漫系列美化XP主题风暴下载
- ubuntu磁盘清理
- 【 react】react实现页面后退按钮(goBack())
- linux tf2 中文,tf2+cnn+中文文本分类优化系列(2)
- 第二章 一阶逻辑 2.2 一阶逻辑合式公式及解释
- 常用转义字符例如amp的含义
- Ubuntu 18.04 安装 GeForce RTX 3090
- antd vue表单验证_ant design vue框架中自定义表单或单个表单框验证
- 第六十八篇:从ADAS到自动驾驶(一):自动驾驶发展及分级
- 一文搞懂设计模式--模板模式