1

基本的に、データベースから保留中の SMS メッセージを読み取り、それらすべてを送信する SMS アプリケーションを構築しています。SMS メッセージには 2 種類あります。いつでも送信できる通常のメッセージと、通常のメッセージの前に送信する必要がある緊急メッセージです。アプリケーション内でマルチスレッドを使用しています。

タスクの 2 つのキューが必要です。1 つは通常のメッセージ用で、もう 1 つは緊急メッセージ用です。次に、緊急メッセージがない限り、通常のメッセージから SMS メッセージを送信できないことを考慮して、プール内のスレッドが 2 つのキューからタスクを実行します。

実装は次のようになります。

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

2 つの ConcurrentQueues、1 つの Hi-Pri と 1 つの Lo-Pri、およびセマフォでそれを行うことができます。

SMS メッセージ オブジェクトをキューの 1 つにプッシュし、セマフォを通知します。

SMS 送信スレッドで、セマフォを待機します。電波を受信したら、まずHi-Priキュー数を確認してください。オブジェクトがある場合は、取得して送信します。存在しない場合は、Lo-Pri キューからメッセージを取得し (必ず存在するため)、送信します。次に、ループしてセマフォを再び待ちます。

于 2012-10-23T13:22:09.313 に答える