//交替输出数字字母,使用Wait和notify public class Test09 { public static void main(String[] args) { //创建打印类的对象 Printer tt=new Printer(); //创建打印数字的方法 NumberPrinter ss=new NumberPrinter(tt); ss.start(); //创建打印字母的方法 LetterPrinter dd=new LetterPrinter(tt); dd.start(); } } //编写一个打印类 class Printer{ //用来表示打印的次数 private int index=1; //2)在打印类Printer中编写打印数字的方法print(int i),3的倍数就使用wait()方法等待,否则就输出i,使用notifyAll()进行唤醒其它线程。 //打印数字的方法 public synchronized void print(int i){ //判断indecx能否被3整除,不能整除的话就输出数字,index++. // 能整除的话就等待,调用输出字母的线程。 if(index%3==0){ try{ wait(); }catch (InterruptedException ce){ ce.printStackTrace(); } }else{ System.out.println(i); index++; notifyAll();//唤醒字母的线程 } } //编写打印字母的方法 public synchronized void print(char c){ //如果index不能被3整除的话,就表示是是数字 //如果除以3等于零,则表示的是字母。 if(index%3!=0){ try{ wait(); }catch (InterruptedException ce){ ce.printStackTrace(); } }else{ //输出的是字母 System.out.println(c); index++; notifyAll();//唤醒数字的线程 } } } //编写打印数字的线程 class NumberPrinter extends Thread{ private Printer p; public NumberPrinter(Printer p){ this.p=p; } @Override public void run(){ // 调用Printer类中的输出数字的方法*/ for(int i=1;i<=52;i++){ p.print(i); } } } //编写打印字母的方法 class LetterPrinter extends Thread{ private Printer p; public LetterPrinter(Printer p){ this.p=p; } @Override public void run() { //调用Printer类中的输出字母的方法,65(A)--122(z) for(char c='A';c<'z';c++){ p.print(c); } } }
//运行的结果1 2 A 4 5 C 7 8 E 10 11 G 13 14 I