/**
* 四个线程ABCD,分别打印A/B/C/D
*/
public class ABCD {
public static void main(String[] args) {
new PrintABCD().start();
}
}
class PrintABCD {
private static enum PrintStatus {
A, B, C, D
};
private static PrintStatus nstatus;
public void start() {
nstatus = PrintStatus.A;
Thread thread1 = new Thread(new PrintA());
Thread thread2 = new Thread(new PrintB());
Thread thread3 = new Thread(new PrintC());
Thread thread4 = new Thread(new PrintD());
thread1.start();
thread2.start();
thread3.start();
thread4.start();
}
private synchronized void print(PrintStatus status) {
if (nstatus == status) {
// System.out.println(Thread.currentThread().getName() + " ");
System.out.print(status);
if (status == PrintStatus.D) {
System.out.println();
}
changeStatus();
return;
}
}
private void changeStatus() {
if (nstatus == PrintStatus.D) {
nstatus = PrintStatus.A;
return;
}
if (nstatus == PrintStatus.A) {
nstatus = PrintStatus.B;
return;
}
if (nstatus == PrintStatus.B) {
nstatus = PrintStatus.C;
return;
}
if (nstatus == PrintStatus.C) {
nstatus = PrintStatus.D;
return;
}
}
private class PrintA implements Runnable {
@Override
public void run() {
// TODO Auto-generated method stub
Thread.currentThread().setName("printa: ");
while (true) {
print(PrintStatus.A);
}
}
}
private class PrintB implements Runnable {
@Override
public void run() {
// TODO Auto-generated method stub
Thread.currentThread().setName("printb: ");
while (true) {
print(PrintStatus.B);
}
}
}
private class PrintC implements Runnable {
@Override
public void run() {
// TODO Auto-generated method stub
Thread.currentThread().setName("printc: ");
while (true) {
print(PrintStatus.C);
}
}
}
private class PrintD implements Runnable {
@Override
public void run() {
// TODO Auto-generated method stub
Thread.currentThread().setName("printd: ");
while (true) {
print(PrintStatus.D);
}
}
}
}/**
* 四个线程ABCD,分别打印A/B/C/D
*/
public class