构造两个线程,轮流输出数字和字母。
1. main方法类
package com.yuxiSorftware.test;
/**
* 多线程控制输出
* 输出格式12A34B······5152Z
* @author ZCHANG2009
*
*/
public class Demo {
public static void main(String[] args) {
Printer printer = new Printer();
Thread t1 = new PrinterNumber(printer);
Thread t2 = new PrinterLetter(printer);
t1.start();
t2.start();
}
}
2.线程打印输出类
package com.yuxiSorftware.test;
/**
* 构造打印线程
* @author ZCHANG2009
*
*/
public class Printer {
//定义指数默认为1。
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();
}
//构造打印字母的方法,每打印1个字母,等待打印两个数字
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();
}
}
3.数字输出类
package com.yuxiSorftware.test;
/**
* 数字输出控制线程
* @author ZCHANG2009
*
*/
public class PrinterNumber extends Thread {
//注入构造打印线程
private Printer printer;
//构造数字输出方法
public PrinterNumber(Printer printer) {
this.printer = printer;
}
//构造线程方法
public void run() {
for(int i = 1; i <= 52; i++) {
printer.print(i);
}
}
}
4.字符输出类
package com.yuxiSorftware.test;
/**
* 字母输出控制线程
*
* @author ZCHANG2009
*
*/
public class PrinterLetter extends Thread {
// 注入构造打印线程
private Printer printer;
// 构造数字输出方法
public PrinterLetter(Printer printer) {
this.printer = printer;
}
// 构造线程方法
public void run() {
for (char c = 'A'; c <= 'Z'; c++) {
printer.print(c);
}
}
}
5.输出结果
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