【多线程】- 多个线程顺序打印ABC

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

这个题目主要考察用户的多线程相关的知识,共享变量/锁机制。

解题思路:要按顺序输出ABC, 循环10次,就要控制三个线程同步工作,也就是说要让三个线程轮流输出,直到10个ABC全部输出则结束线程。这里用一个synchronized对象来控制三个线程的同步。用一个int型变量Num标识由那个线程输出。

废话不说了,直接看代码就明白了

启动Test.java


package cn.liuhaihua;

public class Test {
  public static void main(String[] args) {
    Con  con =  new Con();
    Thread a = new Thread(new Task("A", 0,con));
    Thread b = new Thread(new Task("B", 1,con));
    Thread c = new Thread(new Task("C", 2,con));
    c.start();
    a.start();
    b.start();
  }
}

线程类task.java


package cn.liuhaihua;

public class Task implements Runnable{
         
        private String one;
        private int count;
        private Con con;
         
        public Task(String one,int count,Con con){
            this.one = one;
            this.count = count;
            this.con =con;
        }
         
        public void run() {
            int j=0;
            int i = 0;
            while(i < 10){
              //System.out.println("线程外面:"+one+"---"+con.num+"----"+i);
                synchronized(Task.class){//加锁防止多个线程变更共享变量值
          //System.out.println("线程里面:"+one+":"+num+"i:"+i);
                    if(con.num % 3 == count){
                        con.num++;
                        System.out.println(one+":---:"+con.num+":---:"+i);
                    }else{
              continue;//注意作用的范围
                    }
               }
                i++;
            }
        }
    }

共享变量


package cn.liuhaihua;

public class Con {
  public  Integer num = 0;
}

读者福利

感谢你看到了这里!
我这边整理很多2021最新Java面试题(含答案)和Java学习笔记,如下图
在这里插入图片描述

上述的面试题答案小编都整理成文档笔记。 同时也还整理了一些面试资料&最新2021收集的一些大厂的面试真题(都整理成文档,小部分截图)免费分享给大家,有需要的可以 点击进入暗号:CSDN!免费分享~

如果喜欢本篇文章,欢迎转发、点赞。

记得关注我!
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_49527334/article/details/115256652