多线程练习之两个线程交替打印数字和字母

写两个线程,一个线程打印 1~52,另一个线程打印字母A-Z打印顺序为12A34B56C……5152Z(2个数字 1个字母)。

用线程的创建方式和线程池

public class Test02 {
Object obj = new Object();
    //写两个线程,一个线程打印 1~52,另一个线程打印字母A-Z
    //打印顺序为12A34B56C……51Y52Z(2个数字 1个字母)。
    //创建线程池对象
    ExecutorService es = Executors.newFixedThreadPool(2);
    es.submit(new Runnable() {
        @Override
        public void run() {
            //负责打印1-52
            synchronized(obj){
                for (int i = 1; i <= 52; i++) {
                    System.out.print(i+"\t");
                    //当i为2的倍数的时候线程进入等待
                    if (i % 2 == 0){
                        try {
                            //通知另外一个线程执行
                            obj.notify();
                            //线程等待
                            obj.wait();
                        } catch (InterruptedException e) 
                            e.printStackTrace();
                        }
                    }
                }
            }
        }
    });
    try {
        Thread.sleep(10);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    es.submit(new Runnable() {
        @Override
        public void run() {
            synchronized (obj){
                for (char i = 'A'; i <= 'Z'; i++) {
                    System.out.print(i+"\t");
                    try {
                    	//通知另外一个线程执行
                        obj.notify();
                        //当输出到Z时不等待,方便后面关闭线程池
                        if (i != 'Z'){
                             //线程等待
                            obj.wait();
                        }
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    });
    es.shutdown();
}

执行结果:
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 33 34 Q 35 36 R 37 38 S 39 40 T 41 42 U 43 44 V 45 46 W 47 48 X 49 50 Y 51 52 Z

你可能感兴趣的:(java基础,多线程)