マルチスレッド——循環印刷「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;
}
}