java相关

多线程控制输出

2017-06-04  本文已影响16人  行舟2009

构造两个线程,轮流输出数字和字母。

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

上一篇 下一篇

猜你喜欢

热点阅读