gpt4 book ai didi

Thread 模拟营业大厅叫号程序

转载 作者:知者 更新时间:2024-03-13 08:20:06 26 4
gpt4 key购买 nike

一 需求

在银行、医院、移动营业厅的营业大厅都有排队等号机制,这种机制的主要作用是限流,减轻业务受理人员的压力。当你走进营业大厅后,需要先领取一张流水号纸票,然后拿着纸票坐在休息室等待叫号。

二 分析

假设大厅共有四台出号机,这就意味着有四个线程在工作,下面用程序模拟一下叫号过程,约定当天最多受理 50 笔业务,也就是说号码最多可以出到 50.

三 代码

package concurrent;

public class TicketWindow extends Thread {
    // 柜台名称
    private final String name;
    // 最多受理 50 笔业务
    private static final int MAX = 50;
    // 排队号
    private static int index = 1;

    public TicketWindow(String name) {
        this.name = name;
    }

    @Override
    public synchronized void run() {
        while (index <= MAX) {
            System.out.println("柜台:" + name + "当前的号码时:" + (index++));
        }
    }

    public static void main(String[] args) {
        TicketWindow ticketWindow1 = new TicketWindow("1号出号机");
        ticketWindow1.start();

        TicketWindow ticketWindow2 = new TicketWindow("2号出号机");
        ticketWindow2.start();

        TicketWindow ticketWindow3 = new TicketWindow("3号出号机");
        ticketWindow3.start();

        TicketWindow ticketWindow4 = new TicketWindow("4号出号机");
        ticketWindow4.start();
    }
}

四 测试

柜台:2号出号机当前的号码时:1

柜台:2号出号机当前的号码时:3

柜台:1号出号机当前的号码时:1

柜台:3号出号机当前的号码时:2

柜台:1号出号机当前的号码时:6

柜台:3号出号机当前的号码时:7

柜台:3号出号机当前的号码时:9

柜台:3号出号机当前的号码时:10

柜台:2号出号机当前的号码时:5

柜台:4号出号机当前的号码时:4

柜台:4号出号机当前的号码时:13

柜台:2号出号机当前的号码时:12

柜台:3号出号机当前的号码时:11

柜台:3号出号机当前的号码时:16

柜台:1号出号机当前的号码时:8

柜台:2号出号机当前的号码时:15

柜台:2号出号机当前的号码时:19

柜台:2号出号机当前的号码时:20

柜台:2号出号机当前的号码时:21

柜台:4号出号机当前的号码时:14

柜台:2号出号机当前的号码时:22

柜台:2号出号机当前的号码时:24

柜台:3号出号机当前的号码时:18

柜台:3号出号机当前的号码时:26

柜台:1号出号机当前的号码时:17

柜台:3号出号机当前的号码时:27

柜台:3号出号机当前的号码时:29

柜台:3号出号机当前的号码时:30

柜台:3号出号机当前的号码时:31

柜台:3号出号机当前的号码时:32

柜台:2号出号机当前的号码时:25

柜台:2号出号机当前的号码时:33

柜台:2号出号机当前的号码时:34

柜台:2号出号机当前的号码时:35

柜台:2号出号机当前的号码时:36

柜台:2号出号机当前的号码时:37

柜台:2号出号机当前的号码时:38

柜台:2号出号机当前的号码时:39

柜台:2号出号机当前的号码时:40

柜台:2号出号机当前的号码时:41

柜台:2号出号机当前的号码时:43

柜台:2号出号机当前的号码时:44

柜台:2号出号机当前的号码时:45

柜台:4号出号机当前的号码时:23

柜台:2号出号机当前的号码时:46

柜台:3号出号机当前的号码时:42

柜台:3号出号机当前的号码时:49

柜台:3号出号机当前的号码时:50

柜台:1号出号机当前的号码时:28

柜台:2号出号机当前的号码时:48

柜台:4号出号机当前的号码时:47

Process finished with exit code 0

五 小结

其实这个程序是有问题的,会出现线程安全问题,例如 1 这个号码被叫了2次,另外 index 定义为静态变量,变量的生命周期会很长,也不是太好,后面会一点点优化掉这些问题。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com