经典的一道JAVA面试题:A、B线程循环打印A、B
来源:互联网 发布:mac定制机 编辑:程序博客网 时间:2024/05/18 21:46
1、问题描述
通过Java多线程方式实现循环顺序打印A、B,而且保证无论多少次循环,都不乱序?
2、问题的解决方案
其实这个问题,背后考察的是一个生产者和消费者的问题。即:要保证当前一个线程的任务完成之后,再去执行另一个线程的任务。由多种解决方法:
1、利用wait和notify方法和synchronized关键字联合完成
2、利用重入锁 ReentrantLock和Condition
3、方案分析:
第一种更接近于原理层面,但是,第二种更加简单。因为重入锁把这些都封装起来了,在使用起来也更加方便。
4、核心类介绍:
1、重入锁ReentrantLock,参考一下链接的文章:
2、Condition类的核心方法
1、await()方法会是当前线程等待,同时释放当前锁,当其他线程中使用signal()或signalAll()方法时,线程会重新获得锁并继续执行。或者当线程
被中断时,也能跳出等待。这和obj.wait方法很类似。
2、awaitUninterruptibly()方法与await()方法基本相同。只不过它不会载等待过程中响应中断。
3、signal()方法用于唤醒一个在等待中的线程,这和obj.notify方法很类似
5、基于以上方案的核心代码如下:
阅读全文
0 0
- 经典的一道JAVA面试题:A、B线程循环打印A、B
- 转:java实现三个线程A B C,A线程打印A之后才能B线程打印B,然后接着C线程执行打印C,继而循环下去
- java实现三个线程A B C,A线程打印A之后才能B线程打印B,然后接着C线程执行打印C,继而循环下去
- 转:java实现三个线程A B C,A线程打印A之后才能B线程打印B,然后接着C线程执行打印C,继而循环下去
- java多线程循环打印A,B,C
- 两个关于a,b的面试题
- 线程 :循环打印A,B 方法一:利用ReentrantLock
- 线程 :循环打印A,B 方法一:利用wait notify
- 有三个线程A,B,C 循环10次打印出三个线程的名字ABCABCABCABCABCABCABCABCABCABC
- java 线程上机题 循环唤醒 三个线程轮流打印 顺序 A线程->B线程->C线程
- 面试题:b = ++a + (++a);
- 一道面试题:StringBuffer a=new StringBuffer ("A"); StringBuffer b=new StringBuffer
- 顺序打印ABC------java多线程的一道经典面试题
- JAVA A B C 循环打印10次实现
- [经典面试题]求解集合A与B的差集
- [记录]Java 经典的a+b
- Java多线程--三个线程分别打印a,b,c.请用多线程实现循环打印15次abc
- java 三个线程分别打印A B C 50次
- C# 使用委托开始线程
- FireFox升级后FireBug不能使用
- bootstrap-multiselect加载本地数据
- SqlServer之like、charindex、patindex区别及性能分析(转载)
- 视频目标检测跟踪--Detect to Track and Track to Detect
- 经典的一道JAVA面试题:A、B线程循环打印A、B
- Oracle表数据迁移到mysql
- 从3000元月薪码农到首席架构师的经历
- Linux内核中的GPIO系统之(3):pin controller driver代码分析
- ionic 封装Echarts,自定义组件方便开发调用
- JfreeChart生成统计图,导出word文档
- js封装提示对话框
- [LeetCode] 207. Course Schedule
- pl/sql基础