写两个线程,一个线程打印1~52,另一个线程打印A~Z,打印顺序是12A34B...5152Z

该博客介绍了如何使用线程和信号量实现两个线程交替打印1到52的数字和A到Z的字母,遵循特定顺序。线程间通过信号量flag控制打印顺序,数字线程按2的倍数递增,字母线程通过ASCII码加计数器实现。博主提供了详细的题目分析、代码实现和运行结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1 题目分析

2 代码实现

3 运行结果


1 题目分析

  1. 数字线程的个数是字母线程的2倍
  2. 用信号量flag来控制打印的顺序:这里我们假设当flag = 1时打印数字,当flag = 2时打印字母
  3. 每轮打印中数字有以下规律:12 34 56 78 ~ 我们不难发现:当我们定义一个计数器count从1计数时,第一组数字为2*count-1、2*count,之后每组数字都遵循这个规律;同样的字母也可以通过ASCLL码加count-1得到,需进行类型转换
  4. 将两个数字和一个字母组合成一组,一组打印结束之后进行计数器加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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值