目录
1 题目分析
- 数字线程的个数是字母线程的2倍
- 用信号量flag来控制打印的顺序:这里我们假设当flag = 1时打印数字,当flag = 2时打印字母
- 每轮打印中数字有以下规律:12 34 56 78 ~ 我们不难发现:当我们定义一个计数器count从1计数时,第一组数字为2*count-1、2*count,之后每组数字都遵循这个规律;同样的字母也可以通过ASCLL码加count-1得到,需进行类型转换
- 将两个数字和一个字母组合成一组,一组打印结束之后进行计数器加1操作
2 代码实现
class Print{
private int flag = 1;//信号量!!当值为1时打印数字,当值为2时打印字母
private int count = 1; //12 34 56 78 910
public synchronized void printNum(){
if(flag != 1){
//此时打印字母
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.print(2*count-1);
System.out.print(2*count);
flag = 2;
notify();
}
public synchronized void printChar(){
if(flag