多线程交叉打印数字(1-52)和字母(A-Z)
问题描述:
写两个线程,一个线程打印1~52,另一个线程打印A~Z,打印顺序是12A34B...5152Z;
问题解决方案:
经典的消费者生产者问题。
代码(Java版):
public class Test { public static void main(String[] args) { Center center = new Center(); T1 t1 = new T1(center); T2 t2 = new T2(center); new Thread(t1).start(); new Thread(t2).start(); } } class T1 implements Runnable { private Center center; T1(Center center) { this.center = center; } @Override public void run() { for (int i = 1; i <= 50; i++) { center.shuzi(); } } } class T2 implements Runnable { private Center center; T2(Center center) { this.center = center; } @Override public void run() { for(int i = 1; i <= 26; i++){ center.zimu(); } } } class Center { private int flag = 0; private int index = 1; public synchronized void shuzi() { while (flag < 2) { if(index > 52){ System.exit(0); } System.out.print(index); index++; flag++; } if (flag == 2) { try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } notifyAll(); } public synchronized void zimu() { while (flag >= 2) { System.out.print((char) ('A' + (index / 2 - 1))); flag -= 2; notifyAll(); } if(flag == 0){ try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } }


浙公网安备 33010602011771号