5

複数のステージがあるアプリケーションを作成しています。ステージごとに、Amazon Simple Work Flow (SWF) のキューにメッセージが送信されます。アプリは、受信したメッセージごとに新しいスレッドを開始する必要があります。

アプリケーションが新しいメッセージのキューを常にスキャンし、メッセージが受信された瞬間にアクションを実行するように、待機部分を実装するにはどうすればよいですか?

4

4 に答える 4

2

BlockingQueueそしてその実装LinkedBlockingQueueはここで役立ちます。

呼び出してキューThreadから何かをしたいときtake

queue.take() 

キューが空になると、そのようなスレッドは、他のスレッドが呼び出して何かをキューに入れるまで待機します

queue.put(something). 

また、キューがいっぱいの場合queue.put()、キューに新しい要素用のスペースができるまでスレッドを待機させます。

于 2012-06-04T10:50:06.057 に答える
2

あなたが尋ねていることは生産者消費者モデルと呼ばれ、ここでそれについて読むことができます

基本的な考え方: サイトは生産者であり、クライアントは消費者です。

リスナーがメッセージを受信するまでwait()してからnotifAll()

    class WaitForAmazon{
    private boolean available = false;
    private int contents;

    public synchronized int consumer() {
        while (available == false) {
            try {
                wait();
            } catch (InterruptedException e) { }
        }
        available = false;
        notifyAll();
        return contents;
    }

    public synchronized void producer(int value) {
        while (available == true) {
            try {
                wait();
            } catch (InterruptedException e) { }
        }
        contents = value;
        available = true;
        notifyAll();
    }
}
于 2012-06-04T10:25:06.503 に答える
0

できる 1 つの方法は、メカニズムで新しいメッセージを取得pollするqueueまでです。新しいメッセージwhile loopを取得したら、独自のアクションを呼び出すことができます。

于 2012-06-04T10:08:05.023 に答える
0

サーバーソケットを使用します。

サーバーソケット

特に、.accept() メソッドは誰かが接続を要求するのを待ちます。次に、接続を維持するために必要なパラメーター (アドレス、ポートなど) を渡す新しいスレッドをインスタンス化できます。

于 2012-06-04T10:08:39.773 に答える