题目:编写一个程序,开启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!免费分享~
如果喜欢本篇文章,欢迎转发、点赞。
记得关注我!