使用Java实时显示当前排队数和等待时间

在现代服务系统中,实时监控排队状态对于提升用户体验至关重要。通过准确地显示当前排队人数和预计等待时间,用户可以做出更明智的决策,服务提供者也可以更加高效地管理资源。本文将介绍如何使用Java实现一个简单的系统,以实时显示当前排队数和等待时间,并提供相关代码示例。我们还将使用状态图和饼状图来帮助理解系统状态和用户分布情况。

系统设计

在我们的例子中,我们将实现一个简单的排队管理系统,主要包含以下几个组件:

  1. 客户端:模拟用户请求。
  2. 排队管理器:管理加入队列的用户,以及计算当前的排队数和等待时间。
  3. 数据展示:实时更新当前的排队人数和等待时间。

状态图

在设计实现逻辑之前,我们先用状态图来表示系统的基本状态。

stateDiagram
    [*] --> 空闲
    空闲 --> 排队中
    排队中 --> 服务中 : 开始服务
    服务中 --> 完成 : 服务完成
    完成 --> 空闲

如上图所示,系统首先处于“空闲”状态,接着进入“排队中”状态,客户开始被处理后进入“服务中”状态,完成服务后回到“空闲”状态。

排队管理器实现

接下来,我们需要实现排队管理器的核心逻辑。代码如下:

import java.util.LinkedList;
import java.util.Queue;

public class QueueManager {
    private Queue<Customer> queue;
    private int serviceTimePerCustomer; // 每个客户的服务时间(秒)

    public QueueManager(int serviceTimePerCustomer) {
        this.queue = new LinkedList<>();
        this.serviceTimePerCustomer = serviceTimePerCustomer;
    }

    public void joinQueue(Customer customer) {
        queue.add(customer);
    }

    public int getCurrentQueueSize() {
        return queue.size();
    }

    public int getEstimatedWaitTime() {
        return getCurrentQueueSize() * serviceTimePerCustomer;
    }
}

在这个类中,我们可以看到:

  • joinQueue 方法用于将客户加入队列。
  • getCurrentQueueSize 方法用于获取当前队列人数。
  • getEstimatedWaitTime 方法根据队列人数和每个客户的服务时间计算出预计等待时间。

客户端模拟请求

为了测试我们的排队管理系统,我们可以编写一个简单的客户端模拟用户请求:

public class Customer {
    private String name;

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

    public String getName() {
        return name;
    }
}

接下来,我们可以用一个主类来模拟用户的加入和实时显示队列信息:

import java.util.Timer;
import java.util.TimerTask;

public class QueueApp {
    public static void main(String[] args) {
        QueueManager queueManager = new QueueManager(5); // 每个客户5秒钟服务时间
        
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                System.out.println("当前排队人数: " + queueManager.getCurrentQueueSize());
                System.out.println("预计等待时间: " + queueManager.getEstimatedWaitTime() + "秒");
            }
        }, 0, 2000); // 每2秒更新一次状态

        // 模拟客户加入
        for (int i = 1; i <= 10; i++) {
            queueManager.joinQueue(new Customer("客户" + i));
            try {
                Thread.sleep(1000); // 每秒加入一个客户
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        timer.cancel();
    }
}

数据展示

为了更直观地显示数据,我们可以利用饼图展示当前排队状态。以下是相应的Mermaid语法表示的饼图示例:

pie
    title 当前用户状态
    "排队中": 10
    "服务中": 0
    "完成": 0

结论

本文实现了一个简单的Java排队管理系统,能够实时显示当前排队人数和预计等待时间。我们通过代码示例展示了如何使用队列来管理用户,以及如何用状态图和饼状图来优化视觉效果和理解。这样的系统在餐饮、银行等多个领域均可应用,从而提高用户满意度。随着需求的增加,系统还可以扩展更多功能,如高峰期预测、用户优先级等,以适应不同场景的需求。希望通过本文的介绍,能给你带来灵感,推动你在这一领域的理解与探索。