面试遇到的一道面试题:三个线程循环有序输出10次ABCABC...

解决思路:使用synchronized,wait和notifyAll控制线程同步

package com.myj.test.thread;
/*** 三个线程循环打印ABC10次* * 通过给实现Runnable接口的类添加一个私有变量,该变量就是每一个运行该任务线程的标识,* 只有当线程的标识与Letter的私有变量一致才会运行输出,否则将阻塞,* 直到其他线程将其唤醒,并在阻塞的位置继续执行,即再判断标识和letter的值* * letter的值也是需要改变的,每次线程输出完之后,要将该值更改为下一个* **/
public class ABC {public static void main(String[] args) {ABC t = new ABC();Letter l = t.new Letter();new Thread(t.new Mission(l, 'A')).start();new Thread(t.new Mission(l, 'B')).start();new Thread(t.new Mission(l, 'C')).start();}class Letter{private char letter = 'A';public void show(){System.out.println(letter);}public void nextLetter(char letter){switch(letter){case 'A':this.letter = 'B';break;case 'B':this.letter = 'C';break;case 'C':this.letter = 'A';break;}}public char getLetter(){return this.letter;}}class Mission implements Runnable{private Letter letter;//线程的标识private char let;public Mission(Letter letter, char let){this.letter = letter;this.let = let;}@Overridepublic void run() {for(int i=0;i<10;i++){synchronized(letter){//运行的线程标识如果和letter的值不一样就先使该线程阻塞//直到运行的线程标识和letter值一致while(let!=letter.getLetter()){try {//进入阻塞,直到其他线程调用notifyAll唤醒,//在此基础上继续运行,继续判断是否该轮到该线程输出letter.wait();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}letter.show();letter.nextLetter(let);letter.notifyAll();}}}}}

一道面试题:三个线程循环有序输出10次ABCABC...相关推荐

  1. Java多线程面试题:子线程循环10次,接着主线程循环100,接着又回到子线程循环10次, 接着再回到主线程又循环100,如此循环50次

    近在学习多线程,特贴在这里,并附上自己所作答案(参考与张孝祥老师的方法). 题目如下: 子线程循环10次,接着主线程循环100,接着又回到子线程循环10次, 接着再回到主线程又循环100,如此循环50 ...

  2. java一道多线程题,子线程循环10次,主线程接着循环100次,如此循环50次的问题

    <span style="font-size:18px;">/*** 实现功能:子线程循环10次,接着主线程循环15次,接着又回到子线程循环10次,接着再回到主线程又循 ...

  3. 由一道面试题说开去:程序输出结果是good and gbc

    这道面试题是这样子的: public class Example {String str = "good";char[] ch ={'a','b','c'};public stat ...

  4. 三个线程按顺序输出数字

    当 n = 3N 时,线程1输出 当 n = 3N + 1 时,线程2输出 当 n = 3N + 2 时,线程3输出 最终的输出为 0.1.2.3.4.5.6.7.8.10 #include < ...

  5. Java多线程:用三个线程控制循环输出10次ABC

    题目:有A,B,C三个线程, A线程输出A, B线程输出B, C线程输出C,要求, 同时启动三个线程, 按顺序输出ABC, 循环10次. 解题思路:要按顺序输出ABC, 循环10次,就要控制三个线程同 ...

  6. java 多线程输出_[Java多线程]ABC三个线程顺序输出的问题

    大概的问题是这样的: 有A,B,C三个线程, A线程输出A, B线程输出B, C线程输出C 要求, 同时启动三个线程, 按顺序输出ABC, 循环10次 这是一个多线程协同的问题, 本身多线程是没有执行 ...

  7. 有的线程它死了,于是它变成一道面试题

    来自:why不止技术 有些线程它活着,但它躺在池中碌碌无为: 有的线程它死了,于是它变成一道面试题. 这次的文章,要从一次阿里巴巴的面试说起. 我记得那天是周一,刚刚经历过周末过的放松,干劲十足的我正 ...

  8. 线程执行一半断了_有的线程它死了,于是它变成一道面试题

    ----本文首发于公众号,关注文末公众号阅读体验更佳 有些线程它活着,但它躺在池中碌碌无为: 有的线程它死了,于是它变成一道面试题. 这次的文章,要从一次阿里的面试说起. 我记得那天是周一,刚刚经历过 ...

  9. 【Java面试高频-多线程】- 三个线程分别负责打印A,B和C,循环100次

    (2)面试真题-三个线程分别负责打印A,B和C,循环100次 a.ReentrantLock和Condition来完成这项工作 package com.lcz.thread; // 三个线程 // 匿 ...

最新文章

  1. R语言使用psych包的describeBy函数计算不同分组(group)的描述性统计值(样本个数、均值、标准差、中位数、剔除异常均值、最小最大值、数据范围极差、偏度、峰度、均值标准差等)
  2. mdk编译后的HTML,[转载]keil MDK编译完成后,Program Size:
  3. 不丹的启示:用国民幸福总值替代GDP
  4. python安装要钱吗-python语言是免费还是收费的?
  5. 从零开始玩人工智能-人脸 API-03
  6. MUI多端发布开发指南(终于把MUI的使用场景说清楚了)
  7. FPGA机器学习之stanford机器学习第三堂2
  8. [jQuery] jQuery UI怎样自定义组件?
  9. hoj2434 going to know him
  10. 一个基于 SpringBoot 开源的小说和漫画在线阅读网站,简洁大方 !强烈推荐 !
  11. 残疾人软件开发_组织如何使残疾人更具包容性
  12. android java代码打印系统日志_Java快速开发平台源码
  13. graphicsmagick常用命令
  14. 无法在web服务器上启动调试。调试失败,因为没有启用集成windows身份验证
  15. Error: ‘list‘ object cannot be coerced to type ‘double‘
  16. Base64 - 维基百科,自由的百科全书
  17. 前端导航栏的几种写法
  18. web html div javascript 实现踩黑块游戏
  19. C语言switch语句无break
  20. android盒子共享,Android使用SMB协议共享电脑内文件方法

热门文章

  1. 由PPPOE看Linux网络协议栈的实现
  2. 带你一文搞懂网络层的IP协议\数据链路层的以太网\ARP协议以及DNS和NAT协议
  3. linux 多线程并行计算,Linux下使用POSIX Thread作多核多线程并行计算
  4. java 单向链表 双向链表_java 单向链表与双向链表的实现
  5. 力扣53.最大子序和 多种方法
  6. Java面试之线程池详细
  7. python 用selenium自动启动百度并搜索关键词
  8. 零元学Expression Design 4 - Chapter 5 教你如何用自制笔刷在5分钟内做出设计感效果...
  9. 洛谷 P1330 封锁阳光大学 二分图染色
  10. mysql 查询正在执行的事务以及等待锁 常用的sql语句