阅读背景:

四个线程分别依次打印A/B/C/D,每个线程打印一个字母

来源:互联网 
 
 
/**
 * 四个线程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



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: