5

我正在创建一个应用程序,其中有多个阶段 - 对于每个阶段,一条消息都会发送到我在 Amazon 简单工作流 (SWF) 中的队列......该应用程序应该为收到的每条消息启动一个新线程。

如何实现等待部分 - 以便应用程序不断扫描队列中的新消息并在收到消息时采取行动?

4

4 回答 4

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 回答
2

BlockingQueue它的实现LinkedBlockingQueue在这里很有用。

何时Thread需要take通过调用从队列中获取某些内容

queue.take() 

并且队列将为空,这样的线程将等待直到其他线程通过调用将某些内容放入队列

queue.put(something). 

此外,如果队列已满,queue.put()将使线程等待,直到队列中有空间容纳新元素。

于 2012-06-04T10:50:06.057 回答
0

您可以做的一种方法是poll直到queue您在while loop机制中收到新消息。一旦您收到新消息,您就可以调用自己的操作。

于 2012-06-04T10:08:05.023 回答
0

使用服务器套接字:

服务器套接字

特别是, .accept() 方法等待某人要求连接。然后,您可以实例化一个新线程,传递维护连接所需的参数(地址、端口等)。

于 2012-06-04T10:08:39.773 回答