1

基本上,我正在构建一个 SMS 应用程序,它从数据库中读取待处理的 SMS 消息,然后将它们全部发送。SMS 消息有 2 种类型;可以随时发送的普通消息,以及必须在任何普通消息之前发送的紧急消息。我在应用程序中使用多线程。

我想要 2 个任务队列;一个用于普通消息,一个用于紧急消息。然后池中的线程将执行两个队列中的任务,考虑到除非没有紧急消息,否则无法发送来自正常消息的 SMS 消息。

实现将如下所示:

public class SMSApplication
{
    private Queue<SMSTask> normalMessages = new Queue<SMSTask>(); // not necessarily java.util.Queue
    private Queue<SMSTask> urgentMessages = new Queue<SMSTask>();

    // ...

    public void addNormalMessage(SMSTask task)
    {
        normalMessages.add(task);
    }

    public void addUrgentMessage(SMSTask task)
    {
        urgentMessages.add(task);
    }

    public void runApplication()
    {
        /* iterate over the queues, create new threads or select existing ones from a pool, and then execute the tasks */
    }
}

实现这一目标的最佳方法是什么?我可以使用 来完成BlockingQueue吗?

4

1 回答 1

2

您可以使用两个 ConcurrentQueue、一个 Hi-Pri 和一个 Lo-Pri 以及一个信号量来实现。

将 SMS 消息对象推送到其中一个队列上,向信号量发出信号。

在您的 SMS 发送线程中,等待信号量。收到信号时,首先检查 Hi-Pri 队列计数。如果有一个对象,获取它并发送它。如果没有,则从 Lo-Pri 队列中获取消息(因为肯定有),然后发送。然后循环以再次等待信号量。

于 2012-10-23T13:22:09.313 回答