【发布时间】:2012-10-23 21:22:09
【问题描述】:
基本上,我正在构建一个 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 来实现吗?
【问题讨论】:
-
两端烧掉,可能是BlockingDeque? docs.oracle.com/javase/6/docs/api/java/util/concurrent/… ?副作用是头部的 LIFO;也许你对此没意见。
-
...哎呀,错误的 URL;意思是:docs.oracle.com/javase/6/docs/api/java/util/concurrent/…
-
@full.stack.ex 谢谢!我去
PriorityBlockingQueue看看。
标签: java multithreading concurrency sms producer-consumer