我正在创建一个应用程序,其中有多个阶段 - 对于每个阶段,一条消息都会发送到我在 Amazon 简单工作流 (SWF) 中的队列......该应用程序应该为收到的每条消息启动一个新线程。
如何实现等待部分 - 以便应用程序不断扫描队列中的新消息并在收到消息时采取行动?
我正在创建一个应用程序,其中有多个阶段 - 对于每个阶段,一条消息都会发送到我在 Amazon 简单工作流 (SWF) 中的队列......该应用程序应该为收到的每条消息启动一个新线程。
如何实现等待部分 - 以便应用程序不断扫描队列中的新消息并在收到消息时采取行动?
您所问的称为生产者-消费者模型,您可以在此处阅读有关它的信息
基本思想:站点是生产者,而您作为客户是消费者。
你 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();
}
}
BlockingQueue
它的实现LinkedBlockingQueue
在这里很有用。
何时Thread
需要take
通过调用从队列中获取某些内容
queue.take()
并且队列将为空,这样的线程将等待直到其他线程通过调用将某些内容放入队列
queue.put(something).
此外,如果队列已满,queue.put()
将使线程等待,直到队列中有空间容纳新元素。
您可以做的一种方法是poll
直到queue
您在while loop
机制中收到新消息。一旦您收到新消息,您就可以调用自己的操作。