问题:有A,B,C三个线程,A线程输出A,B线程输出B, C线程输出C,要求,同时启动三个线程,按顺序输出ABC,循环10次。
此问题是面试中常见笔试题,直接上代码
定义打印线程
class PrintABCThread implements Runnable{
// 名称
private String name;
// 锁
private Lock lock;
// 标志位
private Integer flag;
// 打印的数字
private static int num = 0;
// 打印总次数
public static Integer MAX = 30;
public PrintABCThread(String name,final Lock lock,Integer flag){
this.name = name;
this.lock = lock;
this.flag = flag;
}
@Override
public void run() {
while (true){
lock.lock();
// 跳出循环条件
if (num >= MAX){
// 跳出循环前解锁
lock.unlock();
break;
}
// 打印
if (num%3 == flag){
System.out.print(name + " ");
num++;
}
// 解锁
lock.unlock();
}
}
}
主函数调用测试
public class ThreadPrintABCTest {
public static void main(String[] args) {
// 并发锁
final Lock lock = new ReentrantLock();
// 修改打印数
// PrintABCThread.Max = 50;
// 参与打印的线程
Thread threadA = new Thread(new PrintABCThread("A",lock,0));
Thread threadB = new Thread(new PrintABCThread("B",lock,1));
Thread threadC = new Thread(new PrintABCThread("C",lock,2));
// 启动线程
threadA.start();
threadB.start();
threadC.start();
}
}
打印结果
A B C A B C A B C A B C A B C A B C A B C A B C A B C A B C