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

    科技2022-07-13  117

    写两个线程,一个线程打印 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

    Processed: 0.008, SQL: 8