编写两个线程,一个线程打印1-52的整数,另一个线程打印字母A-Z。打印顺序为12A34B56C….5152Z。即按照整数和字母的顺序从小到大打印,并且每打印两个整数后,打印一个字母,交替循环打印,直到打印到整数52和字母Z结束
package com.bjsxt.zuoye;
/**
* 打印类
*/
public class Printer {
private int index = 1;
/**
* 打印数字的方法
*
* @param i 传入的数
*/
public synchronized void print(int i) {
//如果是否是3的倍数
if (index % 3 == 0) {
try {
//3的倍数就使用wait()方法等待
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(i);
//统计打印次数
index++;
//进行唤醒
this.notifyAll();
}
/**
* 打印字母的方法
*
* @param c 传入的字母
*/
public synchronized void print(char c) {
if (index % 3 != 0) {
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(c);
//统计打印次数
index++;
//进行唤醒
this.notifyAll();
}
public Printer() {
}
public Printer(int index) {
this.index = index;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
@Override
public String toString() {
return "Printer{" +
"index=" + index +
'}';
}
}
package com.bjsxt.zuoye;
/**
* 打印数字
* 一个线程打印1-52的整数
*/
public class NumberPrinte extends Thread {
private Printer p;
public NumberPrinte(Printer p) {
this.p = p;
}
@Override
public void run() {
for (int i = 1; i <= 52; i++) {
p.print(i);
}
}
}
package com.bjsxt.zuoye;
/**
* 打印字母
* 一个线程打印字母A-Z
*/
public class LetterPrinter extends Thread {
private Printer p;
public LetterPrinter(Printer p) {
this.p = p;
}
@Override
public void run() {
for (char c = 'A'; c <= 'Z'; c++) {
p.print(c);
}
}
}
package com.bjsxt.zuoye;
public class Test {
public static void main(String[] args) {
//创建打印对象
Printer printer = new Printer();
//创建打印数字对象
NumberPrinte numberPrinte = new NumberPrinte(printer);
//创建打印字母对象
LetterPrinter letterPrinter = new LetterPrinter(printer);
//启动线程
numberPrinte.start();
letterPrinter.start();
}
}