题目:java实现3个线程轮流打印A、B、C,达到“ABBCCCAAAABBBBBCCCCCC”,打印200个字符停止,并在控制台打印出A、B、C各打印了多少个。
思路:三个线程1、2、3分别负责打印A、B、C,lock锁和status实现线程1、线程2和线程3,status等于1时打印A,status等于2时打印B,status等于3时打印C。 lock2实现主线程等待线程1完成再打印ABC的个数。
最新版代码:
public class Printer {
private static final String A = "A";
private static final String B = "B";
private static final String C = "C";
private static final int targetNum = 200;
private static volatile int num = 1;
private static volatile int totalNum = 0;
private static volatile String now = A;
private static final Object lock = new Object();
public static void main(String[] args) {
Thread tA = new Thread(() -> {
print(A);
});
Thread tB = new Thread(() -> {
print(B);
});
Thread tC = new Thread(() -> {
print(C);
});
tA.start();
tB.start();
tC.start();
}
private final static void print(String type) {
while(true) {
synchronized(lock) {
if(totalNum < targetNum) {
if(!type.equals(now)) {
lock.notifyAll();
continue;
}
if(totalNum >= targetNum) {
lock.notifyAll();
continue;
}
if(totalNum + num > targetNum) {
num = targetNum - totalNum;
}
for(int i &