wait and notifyAll

package com.karl.multithread;



public class Test {

    public static void main(String[] args) {

        Printer p = new Printer();

        Thread t1 = new NumberPrinter(p);

        Thread t2 = new LetterPrinter(p);

        t1.start();

        t2.start();

    }

}



class Printer {

    private int index = 1;

    public synchronized void print(int i) {

        while (index % 3 == 0) {

            try {

                wait();

            } catch (Exception e) {

            }

        }

        System.out.print(" " + i);

        index++;

        notifyAll();

    }



    public synchronized void print(char c) {

        while (index % 3 != 0) {

            try {

                wait();

            } catch (Exception e) {

            }

        }

        System.out.print(" " + c);

        index++;

        notifyAll();

    }

}



class NumberPrinter extends Thread {

    private Printer p;

    public NumberPrinter(Printer p) {

        this.p = p;

    }

    public void run() {

        for (int i = 1; i <= 52; i++) {

            p.print(i);

        }

    }

}



class LetterPrinter extends Thread {

    private Printer p;

    public LetterPrinter(Printer p) {

        this.p = p;

    }

    public void run() {

        for (char c = 'A'; c <= 'Z'; c++) {

            p.print(c);

        }

    }

}

 1 2 A 3 4 B 5 6 C 7 8 D 9 10 E 11 12 F 13 14 G 15 16 H 17 18 I 19 20 J 21 22 K 23 24 L 25 26 M 27 28 N 29 30 O 31 32 P

你可能感兴趣的:(notifyAll)