JAVA中使用多线程模拟叫号看病

需求说明

  1. 某科室一天需看普通号20个,特需号10个
  2. 特需号看病时间是普通号的2倍
  3. 开始时普通号和特需号并行叫号,叫到特需号的概率比普通号高
  4. 当普通号叫完第10号时,要求先看完全部特需号,再看普通号
  5. 使用多线程模拟这-过程

普通号代码

package thread;

public class Ordinary implements Runnable{
    private String name;
    private int num = 20;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    @Override
    public void run() {
        for (int i = 0; i < num; i++) {
            System.out.println(name+(i+1)+"号病人正在看病");
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            if (i == 9){
                try {
                    Thread.sleep(10000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

特需号的代码

package thread;

public class Special implements Runnable{
    private String name;
    private int num = 10;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    @Override
    public void run() {
        for (int i = 0; i < num; i++) {
            System.out.println(name+(i+1)+"号病人正在看病");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

}

测试类代码

package thread;

public class Test {
    public static void main(String[] args) {
        Ordinary ordinary = new Ordinary();
        ordinary.setName("普通号");
        Special special = new Special();
        special.setName("特需号");
        Thread th1 = new Thread(ordinary);
        Thread th2 = new Thread(special);
        th1.start();
        th2.start();
        if (ordinary.getNum() == 10){
            try {
                th2.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

运行结果展示

特需号1号病人正在看病
普通号1号病人正在看病
普通号2号病人正在看病
特需号2号病人正在看病
普通号3号病人正在看病
普通号4号病人正在看病
特需号3号病人正在看病
普通号5号病人正在看病
普通号6号病人正在看病
特需号4号病人正在看病
普通号7号病人正在看病
普通号8号病人正在看病
特需号5号病人正在看病
普通号9号病人正在看病
普通号10号病人正在看病
特需号6号病人正在看病
特需号7号病人正在看病
特需号8号病人正在看病
特需号9号病人正在看病
特需号10号病人正在看病
普通号11号病人正在看病
普通号12号病人正在看病
普通号13号病人正在看病
普通号14号病人正在看病
普通号15号病人正在看病
普通号16号病人正在看病
普通号17号病人正在看病
普通号18号病人正在看病
普通号19号病人正在看病
普通号20号病人正在看病

Process finished with exit code 0

  • 15
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hardworking novice

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值