实操2(编写两个线程实现数字和字母的交替打印)

实操2:编写两个线程实现数字和字母的交替打印
*需求分析:

  • 打印输出1-52,A-Z 26个英文字母,打印顺序为12A34B56C78D9…
    *实现思路:
  • 1.编写打印类Printer,声明私有属性index表示第几次打印
  • 2.在打印类中编写打印数字的方法print(int i),当i为3的倍数时调用wait()方法,
    *使当前线程处于等到状态,执行打印字母的方法,使用notifyAll()进行换醒其他线程
  • 3.打印字母方法思路 ,同上
    项目结构:
    实操2(编写两个线程实现数字和字母的交替打印)
    文章图片
public class Printer { private int index=1; //打印数字的方法,每打印两个数字等待打印一个字母 public synchronized void print(int i){ while(index%3==0){ try { wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } System.out.print(""+i); index++; notifyAll(); } //打印字母方法,每打印一个字母等待打印两次数字 public synchronized void print(char c){ while(index%3!=0){ try { wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } System.out.print(c+" "); index++; notifyAll(); } }

public class LetterPrinter extends Thread{ private Printer p; public LetterPrinter(Printer p){ this.p=p; } @Override public void run() { // TODO Auto-generated method stub for(char c='A'; c<='Z'; c++){ p.print(c); } } }

public 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); } } }

public class TestPrinter { public static void main(String[] args) { Printer p=new Printer(); Thread t1=new NumberPrinter(p); Thread t2=new LetterPrinter(p); t1.start(); t2.start(); } }

运行结果:
【实操2(编写两个线程实现数字和字母的交替打印)】实操2(编写两个线程实现数字和字母的交替打印)
文章图片

    推荐阅读