第一种

  1. public static volatile int flag = 1;
  2. public static void printABC1(){
  3. Thread t1 = new Thread(() -> {
  4. while (true) {
  5. synchronized (obj1) {
  6. while (flag != 1){
  7. try {
  8. obj1.wait();
  9. } catch (InterruptedException e) {
  10. e.printStackTrace();
  11. }
  12. }
  13. try {
  14. System.out.println("T1:A");
  15. Thread.sleep(1000);
  16. flag = 2;
  17. obj1.notifyAll();
  18. obj1.wait();
  19. } catch (InterruptedException e) {
  20. e.printStackTrace();
  21. }
  22. }
  23. }
  24. });
  25. Thread t2 = new Thread(() -> {
  26. while (true) {
  27. synchronized (obj1) {
  28. while (flag != 2){
  29. try {
  30. obj1.wait();
  31. } catch (InterruptedException e) {
  32. e.printStackTrace();
  33. }
  34. }
  35. try {
  36. System.out.println("T2:B");
  37. Thread.sleep(1000);
  38. flag = 3;
  39. obj1.notifyAll();
  40. obj1.wait();
  41. } catch (InterruptedException e) {
  42. e.printStackTrace();
  43. }
  44. }
  45. }
  46. });
  47. Thread t3 = new Thread(() -> {
  48. while (true) {
  49. synchronized (obj1) {
  50. while (flag != 3){
  51. try {
  52. obj1.wait();
  53. } catch (InterruptedException e) {
  54. e.printStackTrace();
  55. }
  56. }
  57. try {
  58. System.out.println("T3:C");
  59. Thread.sleep(1000);
  60. flag = 1;
  61. obj1.notifyAll();
  62. obj1.wait();
  63. } catch (InterruptedException e) {
  64. e.printStackTrace();
  65. }
  66. }
  67. }
  68. });
  69. t1.start();
  70. t2.start();
  71. t3.start();
  72. }

第二种

  1. public static ReentrantLock lock = new ReentrantLock();
  2. public static Condition condition1 = lock.newCondition();
  3. public static volatile int flag2 = 0;
  4. public static void printABC2(){
  5. Thread t1 = new Thread(() -> {
  6. while (true){
  7. lock.lock();
  8. while (flag2 % 3 != 0){
  9. try {
  10. condition1.await();
  11. } catch (InterruptedException e) {
  12. e.printStackTrace();
  13. }
  14. }
  15. try {
  16. System.out.println("T1:A");
  17. Thread.sleep(1000);
  18. flag2++;
  19. condition1.signalAll();
  20. condition1.await();
  21. } catch (InterruptedException e) {
  22. e.printStackTrace();
  23. }finally {
  24. lock.unlock();
  25. }
  26. }
  27. });
  28. Thread t2 = new Thread(() -> {
  29. while (true) {
  30. lock.lock();
  31. while (flag2 % 3 != 1){
  32. try {
  33. condition1.await();
  34. } catch (InterruptedException e) {
  35. e.printStackTrace();
  36. }
  37. }
  38. try {
  39. System.out.println("T2:B");
  40. Thread.sleep(1000);
  41. flag2++;
  42. condition1.signalAll();
  43. condition1.await();
  44. } catch (InterruptedException e) {
  45. e.printStackTrace();
  46. }finally {
  47. lock.unlock();
  48. }
  49. }
  50. });
  51. Thread t3 = new Thread(() -> {
  52. while (true) {
  53. lock.lock();
  54. while (flag2 % 3 != 2){
  55. try {
  56. condition1.await();
  57. } catch (InterruptedException e) {
  58. e.printStackTrace();
  59. }
  60. }
  61. try {
  62. System.out.println("T3:C");
  63. Thread.sleep(1000);
  64. flag2++;
  65. condition1.signalAll();
  66. condition1.await();
  67. } catch (InterruptedException e) {
  68. e.printStackTrace();
  69. }finally {
  70. lock.unlock();
  71. }
  72. }
  73. });
  74. t1.start();
  75. t2.start();
  76. t3.start();
  77. }

三个线程按循序一个打印A一个打印B一个打印C 循环打印?的更多相关文章

  1. 编写一个程序,开启 3 个线程,这三个线程的 ID 分别为 A、B、C,每个线程将自己的 ID 在屏幕上打印 10 遍,要求输出的结果必须按顺序显示。如:ABCABCABC…… 依次递归

    import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.uti ...

  2. 迅雷笔试题 (JAVA多线程)启动三个线程,分别打印A B C,现在写一个程序 循环打印ABCABCABC

    题目:http://wenku.baidu.com/view/d66187aad1f34693daef3e8a.html 启动三个线程,分别打印A B C,现在写一个程序 循环打印ABCABCABC. ...

  3. 面试官:线程池如何按照core、max、queue的执行循序去执行?(内附详细解析)

    前言 这是一个真实的面试题. 前几天一个朋友在群里分享了他刚刚面试候选者时问的问题:"线程池如何按照core.max.queue的执行循序去执行?". 我们都知道线程池中代码执行顺 ...

  4. C#中添加三个线程同时启动执行某一方法,并依次调用某方法中的循环打印输。

    添加三个线程同时启动执行某一方法,并依次调用某方法中的打印输:ABC ABC ABC ABC 实现代码如下: using System; using System.Collections.Generi ...

  5. 使用Java实现三个线程交替打印0-74

    使用Java实现三个线程交替打印0-74 题目分析 三个线程交替打印,即3个线程是按顺序执行的.一个线程执行完之后,唤醒下一个线程,然后阻塞,等待被该线程的上一个线程唤醒.执行的顺序是一个环装的队列 ...

  6. java面试记录二:spring加载流程、springmvc请求流程、spring事务失效、synchronized和volatile、JMM和JVM模型、二分查找的实现、垃圾收集器、控制台顺序打印ABC的三种线程实现

    注:部分答案引用网络文章 简答题 1.Spring项目启动后的加载流程 (1)使用spring框架的web项目,在tomcat下,是根据web.xml来启动的.web.xml中负责配置启动spring ...

  7. 有三个线程,a、b、c,a打印“T1”,b打印“T2”,c打印“T3”,a执行完后,b执行;b执行完后,c执行。如此循环100遍

    有三个线程,a.b.c,a打印“T1”,b打印“T2”,c打印“T3”,a执行完后,b执行:b执行完后,c执行.如此循环100遍. package com.company; /** * 测试三个线程协 ...

  8. 开启两个线程,一个线程打印A~Z,一个线程打印1~52的数据

    开启两个线程,一个线程打印A-Z,一个线程打印1-52的数据 import java.util.concurrent.locks.Condition; import java.util.concurr ...

  9. java Semaphore实现ABC三个线程循环打印

    Semaphore位于java.util.concurrent包下.其中有两个重要的方法acquire()和release().acquire用来获取一个信号量,并且是阻塞型的,如果当前还有可用的信号 ...

随机推荐

  1. windows下flutter2.2.3环境搭建

    先上几个必上的网站: 官网: https://flutter.cn/docs/get-started/install/windows 中文资源网(毕竟中文母语,看着轻松): https://flutt ...

  2. F5负载均衡_monitors(健康检查)

    故障现象: 后端有5台服务器,每个服务器上跑着8个应用.使用F5做应用负载调度.这40个应用里面,3-10个应用在高峰期的时候weblogic的DOS窗口显示与数据库断开连接(端口通.业务断),但是F ...

  3. 详解Spring中Bean的作用域与生命周期

    摘要:在利用Spring进行IOC配置时,关于bean的配置和使用一直都是比较重要的一部分,同时如何合理的使用和创建bean对象,也是小伙伴们在学习和使用Spring时需要注意的部分,所以这一篇文章我 ...

  4. C语言:警告提示及解决方法

    #include <stdio.h> int main(){ struct{ char *name; //姓名 int num; //学号 int age; //年龄 char group ...

  5. c语言字符串存储方式

    #include <stdio.h> // C 语言中,任何数据类型都不可以直接存储一个字符串.那么字符串如何存储? //在 C 语言中,字符串有两种存储方式,一种是通过字符数组存储,另一 ...

  6. 10分钟系列:NetCore3.1+EFCore三步快速完成数据库交互

    前言 做程序开发,不管是什么语言什么数据库,其中的ORM(对象关系映射)是必不可少的,但是不管选择哪一种ORM,都需要了解其中的运行机制,配置帮助类等等. 所以很多ORM都开始进行升级封装,我们只需要 ...

  7. 前端基础div(六)

    实例 文档中的一个部分会显示为绿色: <div style="color:#00FF00"> <h3>This is a header</h3> ...

  8. linux 之awk 次数统计

    sort +awk+uniq 统计文件中出现次数 jps -v |grep jar|grep -v Jps|awk  'BEGIN{FS=".jar "} {print $1}'  ...

  9. python序列化proto时对repeated修饰数据进行赋值(常用类型和其他类型)

    说一下对proto文件中数据使用时的书写方法,因为笔者也经常弄混淆 一.repeated修饰符,该列表是常用类型,比如int message C2GS_GoodsList { repeated int ...

  10. java小游戏java九宫格

    问题来源于吾爱破解https://www.52pojie.cn/thread-1484202-1-1.html 编程目标一:根据下面的"游戏说明",实现该游戏程序,完成响应用户的输 ...