//交替输出数字字母,使用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

11-28 02:05