打印输出1-52,A-Z 26个英文字母,打印顺序为A12B34C56D78E910F1112G1314H1516I1718J1920K2122L2324M2526N2728O2930P3132Q3334R3536S3738T3940U4142V4344W4546X4748Y4950Z5152
实现思路:
1.编写打印类Printer,声明私有属性index表示第几次打印
2.在打印类中编写打印数字的方法print(int i),当i为3的倍数时调用wait()方法,
使当前线程处于等到状态,执行打印字母的方法,使用notifyAll()进行换醒其他线程
代码实现
public class Demo03 {
public static void main(String[] args) {
Printer printer = new Printer();
new Thread(()->{
for (char c='A';c<='Z';c++){
printer.print(c);
}
}).start();
new Thread(()->{
for (int i=1;i<=52;i++){
printer.print(i);
}
}).start();
}
}
public class Printer {
private int index=0;
//打印数字的方法,每打印两个数字等待打印一个字母
public synchronized void print(int i){
while(index%3==0){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.print(""+i);
index++;
notifyAll();
}
//打印字母方法,每打印一个字母等待打印两次数字
public synchronized void print(char c){
while(index%3!=0){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.print(c+"");
index++;
notifyAll();
}
}