使用三个线程使得ABC 循环输出十次
package com.bonc; public class ThreadTest { private boolean isA = true; private boolean isB = false; private boolean isC = false; private int count = 0; class Print{ public synchronized void printA(){ while(isA){ System.out.print("A"); isA=false; isB=true; isC=false; notifyAll(); } while (!isA){ try { wait(); }catch (Exception e){ e.printStackTrace(); } } } public synchronized void printB(){ while (isB){ System.out.print("B"); isA=false; isB = false; isC=true; notifyAll(); } while (!isB){ // if (count>=10) break; try { wait(); }catch (Exception e){ e.printStackTrace(); } } } private synchronized void printC(){ while (isC){ System.out.println("C"); count++; // System.out.println(count); isA=true; isB=false; isC=false; notifyAll(); } while (!isC){ if (count>=10) break; try { wait(); }catch (Exception e){ e.printStackTrace(); } } } } class PrintThreadA implements Runnable{ private Print p; public PrintThreadA(Print p){ this.p=p; } @Override public void run() { for (int i = 0; i < 10; i++) { p.printA(); } } } class PrintThreadB implements Runnable{ private Print p; public PrintThreadB(Print p){ this.p=p; } @Override public void run() { for (int i = 0; i < 10; i++) { p.printB(); } } } class PrintThreadC implements Runnable{ private Print p; public PrintThreadC(Print p){ this.p=p; } @Override public void run() { for (int i = 0; i < 10; i++) { p.printC(); // System.out.println(i); } } } public static void main(String[] args) { ThreadTest threadTest = new ThreadTest(); Print print = threadTest.new Print(); PrintThreadA printThreadA = threadTest.new PrintThreadA(print); PrintThreadB printThreadB = threadTest.new PrintThreadB(print); PrintThreadC printThreadC = threadTest.new PrintThreadC(print); new Thread(printThreadA).start(); new Thread(printThreadB).start(); new Thread(printThreadC).start(); } } 运行结果: