マルチスレッド——循環印刷「abc」を実現

1430 ワード

问题:3つのスレッドIDはそれぞれA、B、Cで、多线のプログラミングを実现して、スクリーンの上で10回ABCABCを循环して印刷してください...
考え方:同期マルチスレッドによる印刷文字の制御
public class CirclePrintABC {
	public static void main(String args[]) {
		SingleInstance si = SingleInstance.newInstance();
		Thread a = new Thread(new PrintThread(si, 'a'));
		Thread b = new Thread(new PrintThread(si, 'b'));
		Thread c = new Thread(new PrintThread(si, 'c'));
		a.start();
		b.start();
		c.start();
	}
}

class PrintThread implements Runnable {
	SingleInstance si;
	char str;

	public PrintThread(SingleInstance si, char str) {
		this.si = si;
		this.str = str;
	}
	public void run() {
		for (int i = 0; i < 10; i++) {
			synchronized (si) {
				while (str != si.getPrintStr()) {
					try {
						si.wait();//   si wait  ,wait    Thread 
					} catch (Exception e) {
						
					}
				}
				System.out.println(str);
				si.setPrintStr();
				si.notifyAll();
			}
		}
	}
}
class SingleInstance {
	static SingleInstance singleInstance = null;
	private char printStr = 'a';
	public static SingleInstance newInstance() {//    
		if (singleInstance == null) {
			singleInstance = new SingleInstance();
		}
		return singleInstance;
	}

	public char getPrintStr() {
		return this.printStr;
	}

	public char setPrintStr() {
		printStr = (char) (printStr + 1);
		if (printStr == 'd') {
			printStr = 'a';
		}
		return printStr;
	}

}