写两个线程,一个线程打印 1~ 52,另一个线程打印A~Z, 打印顺序是12A34B...5152Z;

写两个线程,一个线程打印 1~ 52,另一个线程打印A~Z,
打印顺序是12A34B…5152Z;

第一种方式:

class Print{
    private int flag = 1;
    private int count = 1;
    public synchronized void printNum(){
        while(flag != 1){
            //此时应该打印字母
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.print(2*count-1);
            System.out.print(2*count);
            flag = 2;
            notify();
        }
    }
    public synchronized void printChar(){
        while(flag != 2){
            //此时应该打印数字
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        System.out.print((char)(count-1+'A'));
        //继续前行
        count++;
        flag = 1;
        notify();
    }
}
public class Test3{
    public static void main(String[] args) {
        Print print = new Print();
        new Thread(()->{
            for(int i = 0;i<26;i++){
                print.printNum();
            }
        }).start();
        new Thread(()->{
            for(int i = 0;i<26;i++){
                print.printChar();
            }
        }).start();
    }
}

第二种方式:

class MyThread1 extends Thread {
    private Object obj;
    public MyThread1(Object obj) {
        this.obj = obj;
    }

    public void run(){
        synchronized (obj){
            for(int i =1; i<=52; i++){
                System.out.print(i);
                if(i%2 == 0) {
                    try {
                        obj.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                obj.notifyAll();
            }
        }
    }
}
class MyThread2 extends Thread{
    private Object obj;

    public MyThread2(Object obj) {
        this.obj = obj;
    }

    public void run(){
        synchronized (obj){
            for(int i = 0;i<26;i++){
                System.out.print((char)('A' + i));
                obj.notify();
                    try {
                        if(i!=25) {
                            obj.wait();
                        }
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                 }
            }
        }
    }
}
public class Test3{
    public static void main(String[] args) {
        Object obj = new Object();
        MyThread1 thread1 = new MyThread1(obj);
        MyThread2 thread2 = new MyThread2(obj);
        thread1.start();
        thread2.start();
    }
}

猜你喜欢

转载自blog.csdn.net/qq_41420688/article/details/84334894