实操2:编写两个线程实现数字和字母的交替打印
*需求分析:
- 打印输出1-52,A-Z 26个英文字母,打印顺序为12A34B56C78D9…
*实现思路: - 1.编写打印类Printer,声明私有属性index表示第几次打印
- 2.在打印类中编写打印数字的方法print(int i),当i为3的倍数时调用wait()方法,
*使当前线程处于等到状态,执行打印字母的方法,使用notifyAll()进行换醒其他线程 - 3.打印字母方法思路 ,同上
项目结构:
文章图片
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(编写两个线程实现数字和字母的交替打印)】
文章图片