public class Interpret {
// 1和2 打印数字 0 打印字母
private int count = 2; // 0 1 2
private static int num = 1;
private static int c = 'A';
public synchronized void printNum() {
try {
// for循环控制循环次数
for (int i = 1; i <= 52; i++) {
// 先判断是否有资格打印数字
while (count == 0) {
this.wait();
}
System.out.println(num++);
count--;
this.notifyAll();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public synchronized void printChar() {
try {
// 26个字母循环26次
for (int i = 1; i <= 26; i++) {
// 先判断是否有资格打印字符
while (count == 1 || count == 2) {
// System.out.println("说明当前线程" + Thread.currentThread().getName() + "没有资格打印字符,进入阻塞状态");
this.wait();
}
// System.out.println("说明当前线程" + Thread.currentThread().getName() + "有资格打印字符");
System.out.println((char) c++);
count = 2;
this.notifyAll();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Interpret obj = new Interpret();
// 创建2个线程
new Thread(() -> obj.printNum(), "数字线程:").start();
new Thread(() -> obj.printChar(), "字符线程:").start();
}
}